1.简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。 2.特点
- 继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
- 以YAML或JSON格式定义testcase,使用pytest运行,更加简洁优雅 有了pytest,成百上千的插件随时可用
- 支持variables/extract/validate/hooks机制来创建极其复杂的测试场景
- 借助辅助函数(debugtalk.py),任何函数都可以在测试用例的任何部分中使用
- 支持完善的测试用例分层机制,充分实现测试用的复用
- 使用python的第三方库jmespath,让提取和验证json响应更简单
- 基于 HAR 实现接口录制和用例生成功能(har2case)
- 结合 Locust 框架,无需额外的工作即可实现分布式性能测试
- 执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
- 集成了Allure,让测试报告更加漂亮,内容更丰富。
- 极强的可扩展性,轻松实现二次开发和 Web 平台化
3.安装 pip install httprunner 检验是否安装成功 hrun -V 显示出版本号,说明安装成功 4.快速生成项目 httprunner startproject -h 5.项目结构说明 - debugtalk.py 放置在项目根目录下(借鉴了pytest的conftest.py文件的设计)
- .env 放置在项目根目录下,可以用于存放一些环境变量
- reports 文件夹:存储 HTML 测试报告
- testcases 用于存放测试用例
- har 可以存放录制导出的.har文件
6.转换为pytest文件 har2case baidu_home.har 7.转换为YAML/JSON har2case baidu_home.har 在后面加-2y/--to-yml 或者 -2j/--to-json 8.用例结构 - 每个testcase都是HttpRunner的子类
- 必须有两个类属性:config和teststeps
- 单个teststeps列表中的单个Step内部通过链式调用(RunRequest().get().with_params().with_headers().with_cookies().validate().assert_equal())
9.测试用例(config) name (必填) 指定测试用例名称。这将显示在执行日志和测试报告中 base_url (选填) 如果base_url指定,则teststep中的url只能设置相对路径部分 variables(选填) 指定测试用例的公共变量。每个测试步骤都可以引用未在步骤变量中设置的配置变量 verity(选填) 指定是否验证服务器的TLS证书,通常设置为False,当请求https请求时,就会跳过验证 export (选填) 指定导出的测试用例会话变量,当一个测试用例在另一个测试用例的步骤中被引用,并且将被提取一些会话变量以在后续测试步骤中使用时,则提取的会话变量应在配置export部分中进行配置。将测试用例的某些变量指定为全局变量  10.测试用例(teststep) RunRequest(name) RunRequest 在一个步骤中用于向API发出请求,并对响应进行一些提取或验证 name RunRequest 的参数用于指定测试步骤名称,该名称将显示在执行日志和测试报告中 .with_variables 指定测试步骤变量。每个步骤的变量都是独立的,因此,如果要在多个步骤中共享变量,则应在配置变量中定义变量。此外,步骤变量将覆盖配置变量中具有相同名称的变量。(PS:注意参数传递的格式使用**{},使用关键字参数解包的方式进行参数传递给with_variables),参数引用使用"变量名, 如果是函数引用使用{函数名()}" .method(url) 指定HTTP方法和SUT的URL 如果base_url在config中设置,则url只能设置相对路径部分。如果在Config中设置了baseurl,method中只能设置相对路径,可选参数为get/post/put/delete/等 .with_params 传params参数 .with_headers 传headers参数 .with_cookies 传cookie .with_data 传data参数 .with_json 传json参数 .extract 数据提取 .with_jmespath:使用jmespath提取JSON响应主体 with_jmespath(jmes_path:文字,var_name:文字) jmes_path:jmespath表达式,有关更多详细信息,请参考 JMESPath 教程 var_name:存储提取值的变量名,可以在后续测试步骤中引用它 .validate 断言 .assert_XXX:使用jmespath提取JSON响应主体并使用期望值进行验证。 assert_XXX(jmes_path:文本,期望值:任何,消息:文本=“”) jmes_path:jmespath表达式,有关更多详细信息,请参考JMESPath教程 expected_value:指定的期望值,变量或函数引用也可以在此处使用 消息(可选):用于指示断言错误的原因
11.参数化 参数化有三种方式 1.parameters 字段 第一种,使用httprunner改造过的pytest参数化,通过parameters这个字段去引用 @pytest.mark.parametrize(“param”,Parameters( { “first”: [“first”, “second”], “second”: [‘random string’,‘string number’] } )) 2.读取csv文件 #代码中如此书写 @pytest.mark.parametrize(“param”, Parameters( {“username-password”: “${parameterize(data.csv)}”} ))
使用csv文件进行参数化的时候,Parameters的键里每一个-代表一个参数分割。例如username 和 password是两个参数,相应的,csv文件中的列名应该和参数名一致 数据文件 username,password name1,1212 name2,4545 3.debugtalk.py文件中的函数 代码中这样调用: @pytest.mark.parametrize(“param”, Parameters( {“username”: “${get_username()}”} )) 以上方式是使用debugtalk中的方法返回值 在debugtalk里面定义: def get_username(): return [ {“username”: “111111”}, {“username”: “222222”}, {“username”: “333333”}, {“username”: “444444”}, {“username”: “555555”}, {“username”: “666666”}, ]
|