Python接口自动化浅析登录接口测试实战

目录
  • 1、什么是接口?
    • 那么,接口测试和功能测试的区别在哪呢?
  • 2、如何开展接口测试?
  • 3、如何设计接口用例?
    • 1.获取接口文档
      • Fiddler
    • 2.分析接口文档的接口,提取测试点
    • 3.接口测试用例设计思路
    • 4.接口测试其他范围
      • 接口业务测试
      • 接口的性能测试
      • 接口安全测试
      • 在项目下新建一个文件夹common
      • 编写登录接口用例,调用封装的请求类。
      • 对于用例的一些总结:
  • 4、接口测试用例实战

在上一篇Python接口自动化测试系列文章:Python接口自动化浅析unittest单元测试原理,主要介绍单元测试,unittest模块特性、大致流程、源码及实战例子。

以下主要介绍接口概念、接口用例设计及登录接口测试实战。

1、什么是接口?

接口:检测外部系统与系统之间以及内部各个子系统之间的交互点。

通俗来说,接口就是连接前后端的桥梁,接口测试可以简单理解为脱离了前端的功能测试。

一个又一个的接口就对应功能测试内一个又一个的功能。

但注意,一个功能有可能不是一个接口就能实现。

那么,接口测试和功能测试的区别在哪呢?

其实功能测试就是在页面上输入我们的参数值,点点点;

而接口测试没有前端,而是通过接口文档上的调用地址、请求参数等,校验返回的结果值,

也就是说,接口可以看成没有界面的功能测试。

因此,可以分析,系统间的接口包含三部分:输入、处理逻辑、输出。

2、如何开展接口测试?

接口测试流程如下:

1.需求评审,熟悉业务和需求;

2.开发提供API接口文档;

3.根据开发交付的接口文档,编写接口测试用例;

4.接口测试用例评审;

5.开始执行接口测试;

6.提交测试报告;

3、如何设计接口用例?

1.获取接口文档

一般公司的开发会提供接口文档,没有接口文档的自行抓包吧(摸摸头),不知道怎么抓包的小伙伴,可以看看之前的Fiddler系列文章。

Fiddler

接口文档是我们测试时最重要的一个依据,一个规范的接口文档至少包括:

1.接口说明;

2.调用URL;

3.请求方法(get、post等);

4.请求参数、参数类型、请求参数说明等;

5.返回参数说明;

如下为一个简单的登录接口文档:

2.分析接口文档的接口,提取测试点

接口测试用例跟常规的功能测试用例基本一样,

可以从接口功能测试、接口业务测试、接口性能测试、接口安全测试等角度考虑。

接口的逻辑校验,可以参照接口流程图来进行设计,一个分支需要作为一个场景去进行测试,需要覆盖到流程图里面所有的逻辑分支。

接口的参数校验,可以参照接口文档中的参数定义去进行验证,需要覆盖到所有参数对应的枚举值以及错误码等信息。

3.接口测试用例设计思路

接口功能的关注点是:

1.接口参数正确与否:接口传入的参数是否有正确填写;

2.接口参数缺失:接口参数有必填、选填参数,传参时,测试参数缺失对结果的影响;

3.接口参数边界值:比如用户名、密码有长度限制,需要测试不同长度的参数对结果的影响;

4.接口参数类型:比如接口文档中用户名为String类型,测试传入其他数据类型对结果的影响。

4.接口测试其他范围

接口业务测试

主要是从业务的角度出发,把接口组合成一条业务链,比如登录之后充值,在数据库中金额是否正确等等

接口的性能测试

是指接口是否满足业务的要求,比如业务要求系统可以满足50个人同时下单,那么下单这个接口就要可以承担50 TPS,目前业内一般使用JMETER去做接口性能测试,jmeter接口性能后续会单独在Jmeter系列文章里介绍。

接口安全测试

接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用。

注意:本文主要涉及接口功能测试,相信做过功能测试的童鞋,设计接口测试用例也是没问题的。

4、接口测试用例实战

以下,我们以登录接口进行实战。

随着代码模块越来越多,混在一起,杂乱无章,这时我们考虑架构分层了,上篇文章:Python接口自动化之requests请求封装,封装的requests请求类,每个用例都要调用,可以放在公共模块里。

在项目下新建一个文件夹common

放入请求模块requests_handler.py

requests_handler.py

import requests
class RequestsHandler:
    def __init__(self):
        """session管理器"""
        self.session = requests.session()
    def visit(self, method, url, params = None, data= None, json= None, headers= None):
        result = self.session.request(method,url,params=params,data=data,json=json,headers=headers)
        try:
            # 返回json结果
            return result.json()
        except Exception:
            return 'not json'
    def close_session(self):
        self.session.close()

编写登录接口用例,调用封装的请求类。

登录用例,新建一个test_cases文件夹,用来存放用例模块。

test_Login.py

import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
    def setUp(self):
        # 请求类实例化
        self.req = RequestsHandler()
    def tearDown(self):
        self.req.close_session()
    def test_login_success(self):
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "1530272****",
            "pwd": "12345678"
        }

        res = self.req.visit('post',login_url,json=payload)
        self.assertEqual(0, res['code'])
if __name__ == '__main__':
    unittest.main()

运行结果为:

Ran 1 test in 0.213s
OK

对于用例的一些总结:

setUp, tearDown

前置条件,后置条件,setUp实例化,在运行测试用例前获取session管理器, tearDown,在测试用例执行结束后关闭session管理器。

对于断言

小伙伴们可能不知道到底用返回结果中的哪个字段断言。个人意见,如果code、msg比较详细的话,可以利用code、msg其中一个来断言,当然code、msg一起做断言也可以,甚至你觉得返回结果中某个数据符合你的预期,也是可以拿来断言,断言手段是灵活多变的,自行选择最优方案。

小伙伴们看到总结,退出微信,打开王者荣耀,一气呵成,其实还没完呢,我们写了正向用例,还有异常用例也写两条,更多的异常用例可以自行扩展下。

import unittest
from common.requests_handler import RequestsHandler
class LoginTest(unittest.TestCase):
    def setUp(self):
        # 请求类实例化
        self.req = RequestsHandler()
    def tearDown(self):
        # 关闭session
        self.req.close_session()
    def test_login_success(self):
        """
        正确手机号,正确密码
        """
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "1530272****",
            "pwd": "12345678"
        }

        res = self.req.visit('post',login_url,json=payload)
        # 根据请求结果中的code进行断言
        self.assertEqual(0, res['code'])
    def test_phone_is_null(self):
        """
        手机号为空,密码正确
        """
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "",
            "pwd": "12345678"
        }

        res = self.req.visit('post', login_url, json=payload)
        # 根据返回结果中的msg进行断言
        self.assertEqual("手机号码为空", res['msg'])
    def test_pwd_is_null(self):
        """
        正确用户名,密码为空
        """
        login_url = 'http://127.0.0.1:8000/user/login'
        payload = {
            "mobile_phone": "1530272****",
            "pwd": ""
        }

        res = self.req.visit('post', login_url, json=payload)
        # 根据返回结果中的msg进行断言
        self.assertEqual("密码为空", res['msg'])
if __name__ == '__main__':
    unittest.main()

测试结果为:

Ran 3 tests in 0.259s
OK

以上代码如下痛点:

  • 用例和数据未分离,维护成本大。可以数据与测试脚本分离,使用Excel存放测试用例,方便维护。
  • 仔细研究发现正向用例、异常用例,只是传入的数据不一样,其他都是通用
    这种情况下,我们可以引入ddt数据驱动,减少代码量。

到此这篇关于Python接口自动化浅析登录接口测试实战的文章就介绍到这了,更多相关Python接口自动化登录接口测试内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python接口测试get请求过程详解

    python 做借口测试用到的是requests模块,首先要导入requests库,pip install requests 1.get直接请求方式 以豆瓣网为例: url = 'https://read.douban.com/' respose = requests.get(url=url) # status_code 为返回的状态码 print(respose.status_code) # text为返回的数据 print(respose.text) 请求结果:返回状态码为200,表明请求的

  • Python接口测试结果集实现封装比较

    引言 接口测试执行完后,我们需要进行断言,断言的主要目的是用代码来判断实际结果和预期结果是否一致,这跟手工测试中用肉眼去判断是一样的思路.既然这样,我们可以将已知的预期结果和未知的实际结果简单的封装成一个类,然后写一个比较的函数来判断,最后得到结果. 知识点预热 在讲代码之前,先了解一下python的运算符is和==.可能有些人经常用,但是却不知道是什么意思,知其然而不知其所以然. python对象包括三个基本要素:id(身份标识).type(数据类型)和value(值). 1."is"

  • Python接口测试数据库封装实现原理

    引言 做接口测试的时候,避免不了操作数据库.因为数据校验需要,测试数据初始化需要.一些参数化场景需要等. 数据库操作框架设计 这里主要操作mysql数据库,整体思路: 封装实现 具体代码实现: import pymysql import json class OperateMysql(object): def __init__(self): # 数据库初始化连接 self.connect_interface_testing = pymysql.connect( "localhost",

  • Python接口测试环境搭建过程详解

    环境搭建 python 安装:建议使用python3.7 pycharm安装 requests安装 :pip3 install requests requests 基本使用 usage: >>> import requests >>> r = requests.get('https://www.python.org') >>> r.status_code 200 >>> 'Python is a programming languag

  • Python接口测试文件上传实例解析

    接口测试中,上传文件的测试场景非常常见.例如:上传头像(图片).上传文件.上传视频等.下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口. 首先通过抓包分析上传文件接口的请求参数: 下面是上传文件接口脚本.把目标文件以open打开,然后存储到变量file.并且使用files参数指明请求的参数名称.上传文件的类型.以及上传文件的路径. 这里注意:content-type参数,如果我们通过form-data的方式上传文件,我们发送post请求的时候,headers这个参数中一

  • Python接口自动化浅析登录接口测试实战

    目录 1.什么是接口? 那么,接口测试和功能测试的区别在哪呢? 2.如何开展接口测试? 3.如何设计接口用例? 1.获取接口文档 Fiddler 2.分析接口文档的接口,提取测试点 3.接口测试用例设计思路 4.接口测试其他范围 接口业务测试 接口的性能测试 接口安全测试 在项目下新建一个文件夹common 编写登录接口用例,调用封装的请求类. 对于用例的一些总结: 4.接口测试用例实战 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析unittest单元测试原理,主要介绍

  • Python接口自动化浅析数据驱动原理

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析登录接口测试实战,主要介绍接口概念.接口用例设计及登录接口测试实战. 以下主要介绍使用openpyxl模块操作excel及结合ddt实现数据驱动. 在此之前,我们已经实现了用unittest框架编写测试用例,实现了请求接口的封装,这样虽然已经可以完成接口的自动化测试,但是其复用性并不高. 我们看到每个方法(测试用例)的代码几乎是一模一样的,试想一下,在我们的测试场景中, 一个登录接口有可能会有十几条到几十条测试用例,如果每组数

  • Python接口自动化浅析logging封装及实战操作

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析logging日志原理及模块操作流程,主要介绍日志相关概念及logging日志模块的操作流程. 而在此之前介绍过yaml封装,数据驱动.配置文件.日志文件等独立的功能,我们将这些串联起来,形成一个完整的接口测试流程. 以下主要介绍将logging常用配置放入yaml配置文件.logging日志封装及结合登录用例讲解日志如何在接口测试中运用. 一.yaml配置文件 将日志中的常用配置,比如日志器名称.日志器等级及格式化放在配置文

  • Python接口自动化浅析如何处理接口依赖

    在前面的Python接口自动化测试系列文章:Python接口自动化浅析logging封装及实战操作, 其中介绍了将logging常用配置放入yaml配置文件.logging日志封装及结合登录用例讲解日志如何在接口测试中运用. 以下主要介绍如何提取token.将token作为类属性全局调用及充值接口如何携带token进行请求. 一.场景说明 在面试接口自动化时,经常会问,其他接口调用的前提条件是当前用户必须是登录状态,如何处理接口依赖? 在此之前我们介绍过session管理器保存会话状态. 如果接

  • Python接口自动化浅析如何处理动态数据

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析logging封装及实战操作,主要介绍如何提取token.将token作为类属性全局调用及充值接口如何携带token进行请求. 以下主要介绍:接口自动化过程中,动态数据如何生成.动态数据与数据库数据进行对比并替换. 一.应用场景F 注册接口参数需要手机号,手机号如何动态生成? 生成的手机号如何与数据库数据进行对比? 未注册的手机号如何替换用例数据中的手机号? 二.动态手机号处理思路 编写函数,生成随机的手机号: 将生成的手机号

  • Python接口自动化浅析unittest单元测试原理

    目录 一.单元测试三连问 1.什么是单元测试? 2.为什么要做单元测试? 3.怎么做单元测试? 二.unittest模块说明 1.unittest简介 2.unittest组成 1.TestCase(测试用例): 2.TestSuite(测试套件): 3.TestLoader(测试用例加载器): 4.TextTestRunner(执行测试用例): 5.Test Fixture(测试环境数据准备和清理): 3.unittest核心工作原理 三.unittest单元测试 1.实现思路 2.使用介绍

  • Python接口自动化浅析requests请求封装原理

    目录 以下主要介绍如何封装请求 将常用的get.post请求封装起来 get请求源码: post请求源码: 再来研究下request源码: 直接调用request函数 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析Token应用原理,介绍token基本概念.运行原理及在自动化中接口如何携带token进行访问. 以下主要介绍如何封装请求 还记得我们之前写的get请求.post请求么? 大家应该有体会,每个请求类型都写成单独的函数,代码复用性不强. 接下来将请求类型都封装起来

  • Python接口自动化浅析logging日志原理及模块操作流程

    目录 一.日志介绍 01 为什么需要日志? 02 什么是日志? 03 日志的用途是什么? 04 日志的级别分为哪些? 05 日志功能的实现 二.Logging模块 01 logging模块介绍 02 logging模块优势 03 logging日志框架的组成 04 logging函数中的具体参数 05 简单的日志小例子 06 自定义logger日志 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析pymysql数据库操作流程,主要介绍pymysql安装.操作流程.语法基础及

  • Python接口自动化浅析pymysql数据库操作流程

    在上一篇Python接口自动化测试系列文章:Python接口自动化浅析yaml配置文件原理及用法,主要介绍主要介绍yaml语法.yaml存储数据,封装类读写yaml配置文件. 在自动化过程中,我们需要查询数据库,校验结果是否正确,比如充值完成之后,需要查询数据库,查看充值是否成功. 以下主要介绍,pymysql安装.操作流程.语法基础及封装操作数据库类. 一.pymysql介绍及安装 01 pymysql介绍 MySQL应该说是如今使用最为普遍的数据库了,没有之一,而Python作为最为流行的语

  • Python接口自动化浅析yaml配置文件原理及用法

    目录 一.yaml介绍及使用 01 yaml简介 02 yaml语法规则 03 yaml数据结构 对象 数组 纯量 二.yaml配置文件的使用 01 yaml配置文件准备 02 yaml配置文件格式校验 三.yaml配置文件读写 01 安装pyYaml 02 yaml模块源码解析 load: dump: 03 读写yaml配置文件 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析数据驱动原理,主要介绍openpyxl操作excel,结合ddt实现数据驱动. 在自动化过程中,

随机推荐