文章目录
- 常用接口工具对比:
- httprunner_问题1:yml转pytset用例?
- httprunner_问题2:如何解决多模块的函数封装?
- httprunner_问题3:解决了登录后产生的十几个接口的问题?
- httprunner_问题4:如何在debugtalk.py中提取.env文件里面的值?
- httprunner_问题5:大量的异常场景,如何进行参数化处理?
- httprunner_问题6:因登录重定向产生的json()报错。
- httprunner_问题7:下载文件的接口报错505?
- httprunner_问题8:在多边形配置界面点击导出多边形,可在“异步报告导出界面”下载导出的文件,问题是:下载导出的文件返回200,body为空?
- httprunner_问题9:跑导出多边形,并在异步报告导出界面下载多边形的性能用例失败?报错:not found testcases
- httprunner_问题10:调测接口经常报错,针对不同响应码,如何排查?
- httprunner_问题11:如何利用pytest创建测试套(用于升级环境准备测试数据的测试套)?
- httprunner_问题12:新拿到一个项目,接口自动化如何顺利开展工作?
- httprunner_问题13:xx
常用接口工具对比:
postman:不适合自动化,强行做也可以搞,不是最优解
jmeter:用例管理是针对性能设计的,管理case不方便,jmeter+junit完善后可以解决,不推荐
requests:推荐
httprunner:基于requests封装的国内做的比较好的接口框架。推荐
httprunner_问题1:yml转pytset用例?
解决:hmake xx.yml
httprunner_问题2:如何解决多模块的函数封装?
原理:httprunner运行用例,会对用例里面所调用的函数进行正则匹配,然后加载debugtalk.py中对应的函数。所以,只要保证函数能入dbugtalk.py即可。
(1)新建libs目录;
(2)不同的模块需要封装的函数,放在不同的文件中;
(3)在debugtalk.py中导入该模块。
httprunner_问题3:解决了登录后产生的十几个接口的问题?
背景:登录后各种重定向,最终产生了16个接口,将特性界面的接口cookie、token进行分析后,发现从登录用例里面传递出了3个cookies参数,加上token是4个,开启分析登录接口模式,接口间各种传参、重定向,传的我欲仙欲死,最终搞定。这几天在技术群听到说httprunner是登录后,后面的接口步骤都是基于登录产生的临时session,这样的话岂不是解决了我这十几个接口的问题,省去了每次调用接口都要跑十几个接口,跑完200多个用例,日志文件20M,我凑!
解决:
(1)直接写了登录的post接口,不进行跨脚本传参,其中的某参数是登录的get接口从返回的html文件中动态获取的,
(2)用例里面,调用登录接口,
(3)调用获取token的接口(刚进入界面的时候会出发这个接口)
(4)调用你要测的接口,其中.header()里面只需要传入token这个变量即可,cookies是自动继承上面登录的临时会话session中的cookies,
httprunner_问题4:如何在debugtalk.py中提取.env文件里面的值?
场景1:用pathlib模块提取.env文件中某个变量的值
from pathlib import Path
# 读取.env文件的最后一行的 =号后面的 值
hostname = [i for i in Path('./config.ini').open()][-1].split("=")[1]
print(hostname)
场景2:httprunner提取.env文件中某个变量的值
若还需对读取的环境变量做进一步处理,则可以在 debugtalk.py 通过 Python 内置的函数 os.environ 对环境变量进行引用,然后再实现处理逻辑。
import os
def get_user_name():
return os.environ["UserName"]
import os
def get_user_name(index):
return os.environ[f"{
index}"]
httprunner_问题5:大量的异常场景,如何进行参数化处理?
在参数化文件中,将校验参数和对应的入参相关联即可。
class TestCaseXxx(HttpRunner):
@pytest.mark.parametrize("param", Parameters({
"phone-password-message": [
("123123", "asdfasd", "success"),
("123123", "asdfasd", "failed"),
],}),)
def test_start(self, param):
super().test_start(param)
httprunner_问题6:因登录重定向产生的json()报错。
因登录后重定向,产生了太多的接口,在用session处理,获取各种token时,发现返回的数据无法.json()处理,报错:json.decoder.JSONDecodeError:Expecting value: line1 colunm 1 (char())
def get_token(tokenname):
hostname = [i for i in Path('./config.ini').open()][-1].split("=")[1]
se = requests.session()
response_execution = se.get(url=f'{
host}/cas/login', verify=False)
execution = BeautifulSoup(response_execution.text, "lxml").find(attrs={
"name":"execution"})["value"]
se.post(url=host+'/cas/login', json={
xxx}, verfity=False)
fusiongis=se.get(url=f"{
host}/fusiongxxx/csrftoken.do", verify=False).json()
# 这里报错了:json.decoder.JSONDecodeError:Expecting value: line1 colunm 1 (char())
# 这里token在返回的json里,可以直接提取,说明我的返回有问题,并不是提取的问题。
login_ret = s.post(login_url, headers=header, data=body)
token = login_ret.json()["token"]
httprunner_问题7:下载文件的接口报错505?
(1)排查入参,初步判定是入参哪里的问题
(2)通过比较:har2case 转换其他下载文件的脚本,对比后发现是with_data()这里写成了with_json()。
httprunner_问题8:在多边形配置界面点击导出多边形,可在“异步报告导出界面”下载导出的文件,问题是:下载导出的文件返回200,body为空?
(1)返回200,初步判定入参没问题,
(2)body为空,是因为导出接口和下载文件的接口,没有做等待设置,
(3)解决办法:下载文件的接口前添加测试前置:setup_hook(“hook_sleep(5)”)。
httprunner_问题9:跑导出多边形,并在异步报告导出界面下载多边形的性能用例失败?报错:not found testcases
跑接口性能脚本注意事项:
(1)执行命令:locusts -f testcases/xxx/xxxtest.py【必须从testcases目录出发,文件以test结尾】
(2)脚本不能使用parameters做初始的参数化
httprunner_问题10:调测接口经常报错,针对不同响应码,如何排查?
302:接口重定向,意思就是访问了该接口后,没有返回200,直接又去访问当前接口里的refer的参数。这个参数是个新的地址。
400:请求的语法错误 >>> body题哪里错了 >>> 开发悄悄改了参数
404:url错了 >>> 少复制了字母,空格等
409:cookie传递错误 >>> 查询cookie的整个传递过程
505:body哪里错了,1个单词1个单词的排查 >>> 多复制少复制了内容,多写了个{ 等。
httprunner_问题11:如何利用pytest创建测试套(用于升级环境准备测试数据的测试套)?
1、pytest.ini配置文件中,添加标签markers = data
2、在写好的httprunner用例里面,class前面直接添加
import pytest
@pytest.mark.data()
这里注意:运行的话使用debug不会报错,标记完所需要的用例后
3、suiit.py文件执行,这里会自动执行所有标记为data的测试用例:
pytest.main(["-s", "test_webtest.py", "-m=data"])