- 接口自动化测试框架python+unittest/pytest+requests+ddt+openpyxl+pymysql+logging+unittestreport
- 框架设计思路
- 数据驱动
- 结构分层
- 适用场景
- 提测冒烟测试
- 线上巡检回归测试
- 持续集成测试
接口自动化测试一般
业务逻辑层common
公用的方法封装与提取
- 生成随机手机号封装,通过faker库造数据生成随机手机号
- 数据库操作封装
- pymysql:用pymysql连接mysql数据库,执行sql语句,进行数据校验;
- logger日志操作封装,提取日志内容,logger生成日志文件,统一日志输出格式、渠道、级别,执行结果的记录,便于定位问题;
- excel测试数据操作封装
- openpyxl:使用openpyxl模块来操作excel数据的读和写(excle,csv, json, yaml, txt都可以管理测试数据),打开workbook工作簿,获取sheet表单,获取表单中所有数据,直接调用测试用例;
- Email发送邮件封装
数据管理层data
用于存放测试数据,通过参数化读取csv数据;
pyyaml配置文件
测试用例层
- unitest/pytest
python内置单元测试框架,运行测试用例
- requests
requests模块主要用于发送http请求,提供不同的http请求方法;
requests.get(url, params, args) 在get请求中使用params参数,会自动把参数key、value拼接在url后;
requests.post(url, data, json, args)
data传递的是content-type:application/x-www-from-urlencoded,表单形式的数据
格式:a=1&b=2
json传递的是content-type:application/json,json格式的数据
格式:{“a”: 1, “b”: 2}
data只能传简单的只有键值对的dict或者是str格式
json一般只能传dict格式
json.dumps(data) 序列化把字典格式的数据转换成str格式
json.loads(data) 反序列化把str格式转换成字典格式
- ddt数据驱动
使用ddt数据驱动模块,分离测试数据和测试脚本,针对不同的参数组合驱动不同的测试场景,减少代码冗余;
- 提供不同范围的setUp(前置条件)和tearDown(测试清理)方法
setUp(前置条件) 用于测试用例执行前的初始化工作
访问数据库(增删改查操作)、登陆浏览器
tearDown(后置清理) 用于测试用例执行后的清理工作
关闭数据库(增删改查操作)、关闭浏览器
面试题-如何解析接口响应数据json格式
import json,json模块是python中用来解析json数据格式的模块
- 序列化:dict转换json格式字符串 json.dumps(d)
- 反序列化:json格式字符串转换dict json.loads(j)
区别 json字符串 dict字典 数据格式 '{“key1”:“value1”,“key2”:“value2”…}' d = {key1: value1, key2: value2, key3: value3}
key 有序的、可重复的
只能是字符串
无序的,且key必须保持唯一
可以为字符串、元组、数字等不可变的对象
value 任何形式、可以是多层嵌套结构 数值、文本(不能嵌套) 其他 键值对使用的引号只能是双引号 键值对可以使用单引号,也可以使用双引号 面试题-什么是断言
- 断言Assert用于在代码中验证实际结果与预期结果是否符合,如果测试用例执行失败会抛出异常并提供断言日志
- 根据状态码、响应数据字段
- 根据数据库校验,通过对应sql语句校验字段
面试题--如何做接口数据依赖
- 从登陆接口响应结果通过jsonpath/正则表达式提取token/cookie
- 将token设置全局变量
- 查询接口token放在请求头/请求体,从全局变量读取出来,存放到对应位置
- 数据参数化parameterized
接口关联 接口关联又称参数关联,在完成某一场景功能时,需要按顺序请求多个接口,此时接口之间会存在参数关联,比如:B接口的请求参数是通过调用A接口获取的,需要先请求A接口,从A接口的返回数据中拿到需要的字段值,将定义的全局变量以参数化的形式传给B接口,作为请求参数传入; 核心业务接口场景化 充值投资场景:从充值接口返回值中提取再把提取的值变成全局变量,作为请求数据赋值给投资接口; 登陆请求场景:请求登录接口后获取到token值,后续其他接口请求时需要将token作为请求参数传入 下单支付场景:下单–>支付场景,调用下单接口生成订单后会返回订单号,订单号传给支付接口进行支付
配置文件层configs
用于存放当前框架中的所有配置信息(使用不频繁,修改不频繁的数据)
日志管理层logger
利用python自带模块logging创建日志器,根据日志不同级别(info,debug,warning,error,critical),将框架运行中产生的有效日志保存到指定的.txt结尾的文本文件;
代码运行层run.py
收集用例、执行用例生成测试报告reports
reports
存放测试报告reports
jenkins持续集成
jenkins持续集成定时构建,快速反馈,执行完毕后会自动发送邮件通知;
总结
自动化测试发现的bug多吗
- 不多自动化测试不是为了发现bug,是为了保证以前测试过的case不出现新的bug;
- 自动化测试的目的:
- 引入自动化测试,能代替大量繁琐的回归测试工作,把业务测试人员解放出来,继而让业务人员把精力集中在更复杂的业务场景里;
- 一般来说相对稳定的功能场景更适合自动化;