常见接口工具对比:
postman:不适合自动化,强行做也可以搞,不是最优解
jmeter:用例管理是针对性能设计的,管理case不方便,jmeter+junit完善后可以解决,不推荐
requests:推荐
httprunner:基于requests封装的国内做的比较好的接口测试框架,推荐
HttpRunner_问题1:yml转pytest用例?
解决:
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文件中某个变量的值
场景2:httprunner提取.env文件中某个变量的值
若还需对读取的环境变量做进一步处理,则可以在 debugtalk.py 通过 Python 内置的函数 os.environ 对环境变量进行引用,然后再实现处理逻辑。
HttpRunner_问题5:大量的异常场景,如何进行参数化处理?
解决:
在参数化文件中,将校验参数和对应的入参相关联即可。
HttpRunner_问题6:因登录重定向产生的JSON()报错?
因登录后重定向,产生了太多的接口,在用session处理,获取各种token时,发现返回的数据无法.json()处理,报错:json.decoder.JSONDecodeError:Expecting value: line1 colunm 1 (char())
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前面直接添加
3、suiit.py文件执行,这里会自动执行所有标记为data的测试用例:
………………………………..后续有遇到新的问题补充………………………………………………