编程语言
首页 > 编程语言> > 学习python自动化——接口测试

学习python自动化——接口测试

作者:互联网

一、接口测试用例
  1.1、测试用例设计方法
    1)等价类
    2)边界值
    3)因果图
    4)判定表
    5)正交试验(筛选时)
    6)流程覆盖
    7)错误推测
  1.2、接口测试用例怎么写
    1.2.1、功能(自动化测试关注)
      1、有效等价类(还要考虑前置条件、参数替换)
        1)登录成功
      2、无效等价类(还要考虑前置条件、参数替换)
        1)手机号格式错误
        2)手机号不存在
        3)手机号为空
        4)密码错误
        5)密码为空
        6)必填项字段的缺失

    1.2.2、兼容性
    1.2.3、性能
    1.2.4、安全
    1.2.5、UI/易用性
二、接口测试

  2.1、怎么做好接口测试
    1)了解熟悉公司的业务【核心业务】
    2)了解接口相关的信息
    3)了解接口协议类型
      web:F12       app:抓包工具  
    4)核对接口文档和实际的抓包数据
    5)设计接口测试用例
    6)数据准备(requests去做单节口的测试):请求参数、断言数据(requests)
    7)引入测试框架(unittest)
    8)jenkins持续集成
  2.2、自动化测试分类
    1、只测单接口:测试单个接口有没有问题

            定时任务,可放到单接口测试,也可放到流程测试中测试
    2、流程测试:核心业务的流程
      例如:用户:投资人、借款人、审核
         投资人:登录、充值、随机选一个标的投资、提现
             登录、实名认证、添加银行卡、设置密码、修改密码、修改提现卡
         借款人:登录、实名认证、添加银行卡、提现、修改密码、设置密码、授信额度(风控决定)
             登录、发起借款(不同借款期限利率不一样)
         审核:登录、审核、驳回、分配业务员、背调(打标签)
         定时任务,可放到单接口测试,也可放到流程测试中测试
  2.3、分层设计:分类管理
    1、excel表
      1)管理测试用例
      2)读取excel用例
      3)拼接好请求参数
    2、日志模块
    3、业务逻辑
    4、测试报告
    5、日志文件
    6、项目配置
    7、unittest
    8、ddt
    9、框架入口
  2.4、分层设计
    2.4.1、tools:工具
      1)封装excel:读取excel表测试用例
      2)封装配置文件
      3)封装日志文件
      4)封装路径处理
        1、excel用例数据os路径处理
        2、配置conf文件的路径
        3、配置文件添加excel的sheet_name
      5)封装requests
        1、根据项目鉴权方式,无需鉴权的接口(注册、登陆、项目列表)
        2、需要鉴权:传入token,拿到token就添加到请求头中,再去发起请求
        3、不需要鉴权:不传token,token设置一个默认值,请求头就不做处理,再去发起请求
        4、收集日志
    2.4.2、test_case:unittest+ddt
      1)执行测试用例
      2)编写测试用例
        1、创建测试类(继承unittest.TestCase,类名称建议Test开头)
        2、创建测试函数(必须test开头)
          2.1)发起request请求
          2.2)断言
    2.4.3、配置conf:host、数据库
    2.4.4、case_data:excel表(测试用例表)
    2.4.5、report:测试报告——收集测试报告
    2.4.6、logs:日志文件
    2.4.7、main.py:框架入口

  2.5、整体流程:持续集成Jenkins

三、手机号参数
  3.1、Faker:生成随机数
    详见:http://testingpai.com/article/1615615023407
    1、安装

pip install faker

    2、模块导入

from faker import Faker

    3、创建实例

fk = Faker(locale='zh-CN')
#locale='zh-CN':语言环境,默认的 en_US 语言环境,支持传多个 ['ja_JP','en_US','zh-CN']

    4、常用四要素方法
      1)姓名

name = fk.name()

      2)身份证

id_card = fk.ssn()

      3)手机号

phone = fk.phone_number()

      4)银行卡(信用卡)

card = fk.credit_card_number()

    5、确保随机数据唯一性:fk.unique.方法名()

[fk.unique.name() for i in range(10)]

  3.2、pymysql:数据库校验库

import pymysql
coon=pymysql.connect(host='api.lemonban.com',      #主机名
port=3306,              #端口
user='future',            #用户名
password='123456',          #密码
db='futureloan',           #数据库名称
cursorclass=pymysql.cursors.DictCursor)    #设置返回数据格式为dict,如果不设置默认返回元组
cur=coon.cursor()
sql='select * from member where id < 20;'
cur.execute(sql)
result=cur.fetchone()
result=cur.fetchall()
result=cur.fetchmany(size=3)
coon.commit()
cur.close()
coon.close()

    3.2.1、数据库查询该手机号是否已注册,如果注册了,重新生成一个

    3.2.2、安装

pip install pymysql

    3.2.3、导入

import pymysql

    3.2.4、步骤

      1、创建数据库连接

import pymysql
coon=pymysql.connect(host='api.lemonban.com',      #主机名
port=3306,              #端口
user='future',            #用户名
password='123456',          #密码
db='futureloan',           #数据库名称
cursorclass=pymysql.cursors.DictCursor)    #设置返回数据格式为dict,如果不设置默认返回元组

      2、创建游标(相当于工具页面上的查询窗口)

cur=coon.cursor()

      3、需要执行的sql语句

sql='select * from member where id < 20;'

      4、执行sql语句

cur.execute(sql)

      5、返回数据
        1)返回查询到的第一条数据,数据为元组

result=cur.fetchone()

        2)返回查询到的所有数据,一行数据为一个元组,返回嵌套元组

result=cur.fetchall()

        3)根据设置,返回查询到的所有数据,一行数据为一个元组,返回嵌套元组

result=cur.fetchmany(size=3)

      6、数据库提交,更新了数据库就必须要提交

coon.commit()

      7、关闭游标

cur.close()

      8、关闭数据库连接

coon.close()

  3.3、使用生成的手机号,替换掉请求参数的手机号
    3.3.1、请求参数替换
      1.上一个接口或者历史接口返回值
      2.数据库查询到数据
      3.随机生成
    3.3.2、发起请求
    3.3.3、获取token,依赖参数
    3.3.4、响应参数替换

四、参数替换思路
  4.1、参数替换场景
    1)从数据库获取
    2)从配置文件
    3)写死
    4)原来类属性就有
  4.2、参数替换实现思路
    4.2.1、excel用例增加参数替换规则字段:replace_request_data
      1、从数据库读取:{"mobile_phone":["db","select mobile_phone from member where type=0 order by id desc limit 1]}
      2、从配置文件读取:{"mobile_phone":["conf"}
      3、已经在全局变量存在的(类属性):{"mobile_phone":["attribute"]}
      4、replace_request_data 字段为空,表示写死,不需要参数替换
    4.2.2、创建一个类,用来存储全局变量(从数据库、配置文件)读取出来的值,用来做参数替换使用

五、db数据校验思路

  在excel中新增字段:check_db={"actual_data":"select * from member where member_phone = #mobile_phone#;","expected_data":"1"}

    1.获取到check_db这个字段的数据,通过actual_data获取到sql
    2.替换掉sql里面的手机号
    3.执行sql,获取sql执行结果
    4.用这个sql执行结果替换掉actual_data结果的value
    5.比对actual_data和expected_data的val
六、断言思路
  6.1、接口返回断言

{"code": 0, "msg": "OK"}

  6.2、数据库断言
    6.2.1、接口请求之后,做数据库断言
    6.2.2、接口请求前和请求后数据库断言
      1、sql参数替换
      2、多次数据库查询数据的运算
        新增excel字段:check_db_many

{"first": ["db", "select leave_amount from member where mobile_phone='18820992515'"],
"second": ["db", "select leave_amount from member where mobile_phone='18820992515'"],
"expected_data": "first+second+100",
"actual_data": ["db", "select leave_amount from member where mobile_phone='18820992515'"]
}

七、jsonpath:原字符

  $:表示根元素

  @:当前元素

  .or[]:子元素

  ..:递归搜索(不管当前路径,搜索符合条件的数据)

  *:通配符,表示所有的元素

  []:子元素操作符

  [,]:支持迭代器中做多选,多个key用逗号隔开

  [start: end: step]:数组分割操作,等同于切片

  ?():应用过滤表示式

  ():脚本表达式,使用在脚本引擎下面

标签:cur,python,数据库,自动化,接口,phone,sql,data
来源: https://www.cnblogs.com/mango-93/p/16410597.html