接口自动化数据文件与脚本分离
注意:只能在方法里边写东西
1、封装地址
用pytest和request写完脚本之后,就可以着手考虑优化的问题了,首先就是地址的问题,每个地址都有一个共有的ip地址,就很麻烦
1.1、通过变量相加的方式
可以从以下两个方面来解决url的问题,可以新建一个py文件,把变量放进去,就像token值一样,然后把HOST和url相加就可以得到地址
HOST = "http://118.24.105.78:2333"
使用时先导入变量:from utils.common import HOST
u = HOST+"url地址"
但是使用这种添加变量的方式在每次使用的时候都要去加一下,就很麻烦,使用第二种方式就显得容易得多
1.2、通过封装方法
第二种方法,更为普遍,可以封装一个方法
common.py里封装的方法为:
HOST = "http://118.24.105.78:2333" def get_url(url): """ 获取完整的接口地址 """ return HOST + url
使用:在使用时倒入即可:
注意这是两个文件夹下边的文件的倒入,要使用万精油环境变量的方式倒入:
在写case的时候,u = get_url("接口文档上的地址")
2、数据文件与脚本分离
接下来就是数据文件的问题了,之前接口上所有的数据都写到了代码里,但是这样的话就导致了代码的耦合性太高,如果数据文件和脚本分离后,接口信息变动,就不用去修改对应的代码,只需要修改数据文件即可
一般存放数据文件都是存在excel表格中,或者是存放在MySQL数据表中,这里使用excel存放
2.1、建立excel文档
首先新建一个excel文档,这个文档里要放入于接口相关的信息:编号、名称、接口地址、参数、请求头、HTTP状态码、结果码
2.2、建立分层data,导入数据文件
先建立一个data文件夹,将刚才写的excel放入data文件夹中
2.3、读取excel中的数据
2.3.1、安装xlrd
读取excel,会用到python的一个第三方包:xlrd,这是python专门用来读取excel 的一个包
要想使用这个包,首先就是要安装它,管理员方式打开cmd,输入命令:pip install xlrd(这个一般来说都是要加-i参数的,但是这个可能比较小吧,没加也很快下载好了)
2.3.2、封装方法读取excel
接下里就是去封装一个方法来读取excel
① 先再utils里新建一个exceltools.py文件
② 导入xlrd,封装方法
""" 读取excel """ import xlrd def read_excel(excel_path, sheet_name, skip_first=True): """ 方法:python读取excel 参数: - excel_path:excel的路径 - sheet_name:表格名字 - skip_first: 是否跳过首行,True:跳过;False:不跳过,默认值是跳过 返回值:[[1, "xxx接口成功", "/login"...], []] """ results = [] datas = xlrd.open_workbook(excel_path) #就相当于在打开excel table = datas.sheet_by_name(sheet_name) #读取excel中的每一个sheet if skip_first == True: start_row = 1 else: start_row = 0 # 循环读取每一行数据 for row in range(start_row, table.nrows): results.append(table.row_values(row)) return results #测试 if __name__ == "__main__": a = read_excel("./data/测谈网接口.xlsx", "问题详情页面") print(a)
只用在封装方法这里import xlrd就行了,别的地方可以不用导入xlrd
2.3.3、使用封装好的读取excel的方法
① 使用前先导入刚才封装好的方法
这里由于是不同文件夹下的不同文件的导入,还是得使用万精油方式:
②在py文件方法外边先读取出全部数据
使用时还需要在方法外边将excel读取出来(共用嘛,所以需要在方法外边)
他读取出来之后的返回值是放在一个大的列表中(每一个sheet放在一个大的列表里),然后大的列表里有无数个小的列表,excel中有几行数据就有几个小的列表,这里就通过下标来取值来读出了
③ 按下标一一取值读取
边分离可以边执行,看是否会报错
由于header和请求数据python代码需要的是字典类型,但是读取excel中读取出来的是字符串类型,这里就涉及到了数据类型的转换,用eval()进行强转
涉及到token值的地方,python代码中用了read_file()来读取token值,在写excel数据文件的时候,直接将这个方法原封不动的搬过去就行,到时候再用eval()方法强转,会自动把token值获取到,这一点是eval()方法的强大之处之一
3、接口自动化测试用例的编写
就是把普通的接口测试用例转换成了python代码而已
写接口自动化测试用例的时候要注意以下几点:
- 场景一般都只考虑正向场景,因为一般来讲,都是先接口测试,然后再功能测试,然后功能稳定之后才是自动化测试,所以,在这之前异常的场景就已经在解耦测试中测试到了的
- 如果时间充足的情况下,可以考虑将异常场景也加入(比如参数异常,参数传入的数据异常等等)
- 添加一个用例,会涉及到数据文件的添加以及测试方法中脚本文件的添加等等
3、测试报告
allure:第三方专门的网页测试报告
1、使用allure需要有Java环境
2、安装allure-commandline工具,并配置环境变量(将安装路径下的bin目录添加到path中)
3、验证环境变量:新打开一个cmd,输入allure,如果没有出错,就没问题,如下图所示
4、安装allure-pytest第三方包,以管理员身份打开cmd:pip3 install allure-pytest -i https://pypi.tuna.tsinghua.edu.cn/simple
5、以管理员身份重启VScode
6、运行(这里就不是只输入pytest了):输入命令pytest --alluredir=result,这时会在目录里边自动生成一个report文件夹,文件夹下边就保存着每一个case 的结果
7、把result结果文件编译成测试报告,运行命令:allure generate result -o report --clean
8、打开result里边的测试报告,输入命令:allure open -h 127.0.0.1 -p 10086 report
不出意外的话会自动弹出一个网站(默认是英文的,左下角可以改成中文的),如果没有弹出,就自己手动复制网址去打开就行
如果想退出,就在VScode里边Ctrl+S就行,但是退出后测试报告就失效了,所以一定要最后再去做这一步
注:除了第三步,第四步在cmd里,别的命令都是在VScode里边执行的