一个接口设计用例时有可能会十几条到几十条都有可能,多个接口就有很多了,这时候我们可以考虑到自动化测试接口,采用数据驱动方式,把数据写在excel表格中,代码做封装,用数据驱动测试,两部分相互独立。python中用ddt模块来做数据驱动,代码简单好维护,调试也方便
一、主要功能及技术栈
1. 主要功能框架:
① 公共模块(common):存放与业务相关的公共函数,封装起来放在common文件中,供其他接口实际调用时使用
② 测试用例(testCase):主要存放接口测试用例(脚本命名规则:test_脚本名称;一个测试类对应一个接口)
③ 测试数据(testData):存放测试用到的数据
④ 测试报告(report):生成测试报告以邮件形式发送(html / text /smtp)
⑤ 全局执行文件main:Python定义的main()函数只有当该Python脚本直接作为执行程序时才会执行;当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行
2. 技术栈:python + ddt + unittest + requests + htmltextrunner
3. 接口测试用例编写步骤
① 导入库文件 ② 定义类 ③ 为类定义方法,并在该方法内实现接口脚本的编写 ④ 运行结果 ⑤ 结果校验
二、接口测试框架实例编写
本期接口测试框架需求:实现wanandroid网站注册、登录、退出登录三个接口的接口自动化测试脚本的编写
git地址:https://github.com/annielulu/interfaceTest
1)框架设计:
common:configHttp,readConfig,readExcel,writeExcel,configEmail
testCase:使用unittest / ddt /requests实现接口测试脚本编写
testData:使用excel表格存放测试数据
report:以邮件形式输出测试报告
2)实现思路:
1. 通过抓包工具抓到接口数据并存放在excel表格中(urlSheet / paramSheet / assertSheet)
2. 获取excel数据(定义一个readExcel类)
① 找到excel文件并打开
② 定位sheet页,定位行和列
③ 读取excel数据
④ 组装测试数据,变为一条正确的匹配的接口测试数据
④ return data给testCase模块
3. 编写testCase模块
① 调用readExcel模块,拿到测试数据
② 根据接口的请求方式来判断调用什么方法(get请求 / post请求)
③ 校验get请求 / post请求的数据
④ 保存执行结果
⑤ 写入excel中(writeExcel模块)
4. writeExcel模块
① 找到excel,读取数据
② 复制excel对象
③ 根据id写入对应的实际结果和接口测试状态
5. 发送测试报告
三、ddt及unittest介绍
1. 背景介绍: python的unittest没有自带数据驱动功能,所以如果要使用unittest同时又想使用数据驱动,那么就可以使用ddt(Data-Driven Tests)来完成。
2. 使用步骤:① 导入ddt包 ② 用装饰器装饰@ddt ③ 传入参数,执行
3. 代码实例:
四、python读写excel
1. 使用xlrd和xlwt读写excel(需要下载安装xlrd库和xlwt库 -- pip install xlrd)
①打开excel
readbook = xlrd.open_workbook(r'\test\canying.xlsx')
② 获取读入的文件的sheet
sheet = readbook.sheet_by_index(1) #索引的方式,从0开始
sheet = readbook.sheet_by_name('sheet2') #通过名字定位sheet页
allsheetnames = readbook.sheet_names() #返回所有sheet页名字组成的列表
③ 获取sheet的最大行数和列数
nrows = sheet.nrows #行
ncols = sheet.ncols #列
④ 获取某个单元格的值
lng = sheet.cell(0,0).value #获取1行1列的表格值
lat = sheet.cell(1,4).value #获取2行5列的表格值
获取某行/某列的值
row_value = sheet.row_values(x) #获取x行的值,从0开始计数
col_value = sheet.col_values(y) #获取y列的值,从0开始计数
⑤ 打开将写的表并添加sheet
writebook = xlwt.Workbook() #打开一个excel
sheet = writebook.add_sheet('test') #在打开的excel中添加一个sheet
⑥ 将数据写入excel
sheet.write(i,0,result[0]) #写入excel,i行0列
sheet.write(i,1,result[1])
⑦ 保存
writebook.save('answer.xls') #一定要记得保存