ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-25 21:34:54  阅读:180  来源: 互联网

标签:cur python 数据库 自动化 接口 phone sql data


一、接口测试用例
  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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有