httprunner使用总结

2020-01-15 Qtest之道

微信关注公众号(Lambda在线)

第一时间推送最新技术资料


1

背景


在准备做接口自动化的过程中,了解到httprunner是一种简洁、不会代码的人也可以快速上手的框架。维护人员只需要编写并维护json或yaml文件,即可实现自动化测试。


在结合httprunnerV2.X中文使用文档,应用于自己的项目中,还是遇到了一些问题,所以结合项目经验以及源码分析,来总结框架的使用方法,以及遇到问题的解决办法。


2

环境


本次接口自动化采用的是:python3.7+httprunner2.0.1


3

项目文件结构


利用项目脚手架直接创建测试用例分层结构:hrun --startproject demo,其中demo为项目名称。 


4

Httprunner的核心命令


  • hrun:httprunner的缩写,功能与httprunner完全相同

  • locusts:基于Locust实现性能

  • har2case:辅助工具,可将har格式(HTTP Archive)转换为YAML或者JSON格式。


在我们实际项目的应用中,更多的应用hrun指令。目前没有做性能测试,所以没有用到locusts。用例选择yaml文件格式,为自己书写,没有使用转换工具。


  • hrun主要用到的指令如下:


-V:获取当前项目使用的httprunner版本
--startproject:生成项目结构
--log-level:日志信息,默认info,调试时可指定debug,hrun ss.yml --log-level debug
--dot-env-path:指定.env文件路径,在本次项目中,用于加载host来区分环境
--report-template:指定测试报告模板路径
--report-dir:指定生成报告的路径
--html-report-name(测试一下,看是否能改名儿)
--validate:校验json用例格式
--prettify:规范json用例格式


  • httprunner的运行方式:


1、一种是基于命令行模式:


hrun XXX.yml --dot-env-path env/staging.env --log-level debug


2、另一种是作为软件包集成到自己的项目中,通过类名.方法调用,这种方式也是支持参数化的。


from httprunner.api import HttpRunner  
runner = HttpRunner(failfast=False)
 runner.run("XX.yml")


首先类初始化常用的参数:__init__(self, failfast=False,save_tests=False,report_template=None, report_dir=None,log_level="INFO", log_file=None)


failfast:设置为 True 时,测试在首次遇到错误或失败时会停止运行;默认值为 False
report_template:报告模板
report_dir:生成报告位置
log_level:日志等级
log_file:生成日志文件位置


其次方法可传入的参数:run(path_or_tests, dot_env_path=None, mapping=None):


path_or_tests:用例所在文件夹或者用例的路径
dot_env_path:环境变量的路径,默认为当前工作目录的.env文件
mapping:变量映射,可用于对传入测试用例中的变量进行覆盖替换


备注:


文档中写,支持文件夹和文件路径的混合情况(list/set)存在bug,会提示“ stat: path should be string, bytes, os.PathLike or integer, not list”


原因:传入list或set时,在api->run_path->load_tests中没有将list处理,造成调用genericpath->exists在判断路径时候,系统抛异常了.


5

httprunner运行时的工作流


httprunner使用总结


6

问题:基于httprunner2.0.1版本


1、有些接口的入参需要时间戳,并且这个时间戳是存在有效期的


问题:我们把时间戳写在了case层,当用例数过多的时候,把变量加载完再去运行,就会造成可能执行的时候,时间戳已经失效了


解决:将具有时效性的入参,写在api层,这样每次运行时,会取到当前时间戳


2、variables变量覆盖问题


问题:文档中描述“若某变量在 config 和某 test 中都定义了,则该 test 中使用自己定义的变量值”,在目前系统中是有bug的


原因:在parse里边进行变量替换时,写反了替换变量


httprunner使用总结


3、extract提取参数问题


问题:web系统中,如增加客户资料信息接口,接口返回值并没有返回客户id,但是为了做连贯性用例,我们比较希望获取这个值


不建议的解决办法:修改接口的返回值,通过sql获取刚刚添加的资料的id,并塞入接口返回值然后通过extract关键字进行抽取


httprunner使用总结


4、小技巧


问题:目前api仅用于接口定义,在case层完善用例,但是入参很多的时候,针对某个入参,其他参数无所谓的时候,造成case定义的变量冗余


解决:可在api层的variables字段里边,将所有的入参给个默认值,在api里边通过$引用变量,然后外边case调用的时候,根据覆盖的原则,想改变哪个入参,就填写哪个入参。


httprunner使用总结


5、用例分层后,suite层是不支持直接调用api的


分析:根据源码可知,_parse_testsuite方法在解析testsuite的时候,并没有解析test字段,如图:


httprunner使用总结


6、当接口定义中,入参的key如果遇到yes、no字段,一定要记着加引号,否则程序load时候,会当做boolean类型处理,处理为True、False


httprunner使用总结


7、times重复执行指定次数问题


问题:目前times只能应用在api上,即只能重复执行测试步骤。在testcase层的config中和testsuite的config中都不能使用times关键字,去实现多次执行测试用例。以下是按照用例分层后,可调用到的。


解决办法:因为httprunner对外提供调用,所以我们可以自己写个python方法,重复调用。对于我们项目需要频繁造数比较有帮助


httprunner使用总结


8、suite层不能使用validate字段



以上为工具使用上遇到的问题以及基于我们项目本身的小技巧~






Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!

陪伴是最长情的告白

每日为你推送最in的测试技术

版权申明:本站内容全部来自于腾讯微信公众号,属第三方自助提交推荐。《httprunner使用总结》的版权归原作者「Qtest之道」所有, 文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

Qtest之道

Qtest之道

Qtest是360公司旗下的专业测试团队,在接口测试

猜你喜欢