• 0
  • 0
分享

HttpRunner3.X开源接口测试框架学习(二)

debugtalk.py

每个项目应该并且只能有一个debugtalk.py文件。该文件具有多种功能。

  • 作为项目的根路径锚,测试用例中的相对路径(例如引用测试用例或CSV文件)都基于此根路径

  • 存储自定义python函数,在测试用例中调用的函数均在此文件中定义

HttpRunner框架中的变量

全局变量

全局变量在.env文件中定义,编写测试用例脚本时使用中${ENV(KEY)} 获取变量

pytest格式

1.png

用例级变量

在使用pytest格式编写测试用例时,variables用来定义变量,请注意如果全局环境变量与测试用例脚本中存在相同变量名,则优先使用用例级变量。即:测试用例变量>导出变量>测试套件配置变量>引用的测试用例配置变量

2.png

创建HttpRunner项目

httprunner框架提供了自动生成手脚架项目的功能,可以快速创建新项目。

#使用httprunner命令创建项目
httprunner startproject demo    创建名为demo的httprunner项目
#自动生成的文件目录如下:      

created folder: demo/har                    #har接口录制导出文件,用于生成测试脚本
created folder: demo/reports    #测试报告存放目录     
created folder: demo/testcases              #测试用例存放目录
created file: demo/testcases/demo_testcase_request.yml   #测试用例模板示例
created file: demo/testcases/demo_testcase_ref.yml       #测试用例模板示例
created file: demo/debugtalk.py             #debugtalk.py文件  #用于编写自定义函数
created file: demo/.env         #全局环境变量定义文件
created file: demo/.gitignore


示例创建baidutest项目:

C:\github>httprunner startproject baidutest
2020-08-11 14:32:19.860 | INFO     | httprunner.scaffold:create_scaffold:43 - Create new project: baidutest
Project Root Dir: C:\github\baidutest

created folder: baidutest
created folder: baidutest\har
created folder: baidutest\testcases
c:\programs\python\python38\lib\site-packages\urllib3\request.py:171: InvalidProxyConfigurationWarning: Your proxy configuration specified an HTTPS scheme for the proxy. Are you sure you want to use HTTPS to contact the proxy? This most likely indicates an error in your configuration. Read this issue for more info: https://github.com/urllib3/urllib3/issues/1850
  return self.urlopen(method, url, **extra_kw)
created folder: baidutest\reports
created file: baidutest\testcases\demo_testcase_request.yml
created file: baidutest\testcases\demo_testcase_ref.yml
created file: baidutest\debugtalk.py
created file: baidutest\.env
created file: baidutest\.gitignore

$ tree baidutest -a
2020-08-11 14:32:19.921 | WARNING  | httprunner.scaffold:show_tree:29 - tree command not exists,

ignore.
Sentry is attempting to send 0 pending error messages
Waiting up to 2 seconds
Press Ctrl-Break to quit

编写httprunner框架接口测试用例

httprunner提供了自动生成测试脚本的功能,利用har2case   xxx.har命令可以将抓包工具导出的har文件转换为pytest格式测试用例(默认格式),也可以转换成yaml、json格式。

使用抓包工具录制业务:

如图使用charles工具录制导出har文件

5.png


har2case命令详解:

$ har2case -h
usage: har2case har2case [-h] [-2y] [-2j] [--filter FILTER]
                         [--exclude EXCLUDE]
                         [har_source_file]
positional arguments:
  har_source_file       Specify HAR source file
optional arguments:
  -h, --help            show this help message and exit
  -2y, --to-yml, --to-yaml
                        Convert to YAML format, if not specified, convert to
                        pytest format by default.
  -2j, --to-json        Convert to JSON format, if not specified, convert to
                        pytest format by default.
  --filter FILTER       Specify filter keyword, only url include filter string
                        will be converted.
  --exclude EXCLUDE     Specify exclude keyword, url that includes exclude
                        string will be ignored, multiple keywords can be
                        joined with '|'

执行har2case  doctest.har 命令后会在当前文件夹生成doctest_test.py测试用例文件

C:\github\baidutest\har>har2case doctest.har
2020-08-11 14:51:57.340c:\programs\python\python38\lib\site-packages\urllib3\request.py:171: InvalidProxyConfigurationWarning: Your proxy configuration specified an HTTPS scheme for the proxy. Are you sure you want to use HTTPS to contact the proxy? This most likely indicates an error in your configuration. Read this issue for more info: https://github.com/urllib3/urllib3/issues/1850
  return self.urlopen(method, url, **extra_kw)
 | INFO     | httprunner.ext.har2case.core:gen_testcase:356 - Start to generate testcase from C:\github\baidutest\har\doctest.har
2020-08-11 14:51:57.354 | INFO     | httprunner.ext.har2case.core:_make_testcase:347 - Extract info from HAR file and prepare for testcase.
2020-08-11 14:51:57.358 | INFO     | httprunner.compat:ensure_testcase_v3:219 - ensure compatibility with testcase format v2
2020-08-11 14:51:57.438 | INFO     | httprunner.loader:load_dot_env_file:127 - Loading environment variables from C:\github\baidutest\.env
2020-08-11 14:51:57.456 | DEBUG    | httprunner.utils:set_os_environ:33 - Set OS environment variable: USERNAME
2020-08-11 14:51:57.462 | DEBUG    | httprunner.utils:set_os_environ:33 - Set OS environment variable: PASSWORD
2020-08-11 14:51:57.471 | INFO     | httprunner.make:make_testcase:349 - start to make testcase: C:\github\baidutest\har\doctest.har
2020-08-11 14:51:57.480 | INFO     | httprunner.make:make_testcase:442 - generated testcase: C:\github\baidutest\har\doctest_test.py
2020-08-11 14:51:57.484 | INFO     | httprunner.make:format_pytest_with_black:170 - format pytest cases with black ...
reformatted C:\github\baidutest\har\doctest_test.py
All done! ✨ ? ✨
1 file reformatted.
2020-08-11 14:51:58.705 | INFO     | httprunner.ext.har2case.core:gen_testcase:377 - generated testcase: C:\github\baidutest\har\doctest_test.py

6.png

doctest_test用例文件:

# NOTE: Generated By HttpRunner v3.1.4
# FROM: har\doctest.har
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseDoctest(HttpRunner):
    config = Config("testcase description").verify(False)
    teststeps = [
        Step(
            RunRequest("/controller/login/login.html")
            .get("http://www.doclever.cn/controller/login/login.html")
            .with_headers(
                **{
                    "Host": "www.doclever.cn",
                    "Upgrade-Insecure-Requests": "1",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",
                    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
                    "Referer": "http://www.doclever.cn/controller/index/index.html",
                    "Accept-Encoding": "gzip, deflate",
                    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
                    "Cookie": "pgv_pvid=7266193040",
                    "Connection": "keep-alive",
                }
            )
            .with_cookies(**{"pgv_pvid": "7266193040"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal('headers."Content-Type"', "text/html")
        ),
        Step(
            RunRequest("/user/login")
            .post("http://www.doclever.cn:8090/user/login")
            .with_headers(
                **{
                    "Host": "www.doclever.cn:8090",
                    "Content-Length": "28",
                    "Accept": "application/json, text/plain, */*",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",
                    "content-type": "application/x-www-form-urlencoded",
                    "Origin": "http://www.doclever.cn",
                    "Referer": "http://www.doclever.cn/controller/login/login.html",
                    "Accept-Encoding": "gzip, deflate",
                    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
                    "Cookie": "pgv_pvid=7266193040; __qc_wId=29",
                    "Connection": "keep-alive",
                }
            )
            .with_cookies(**{"pgv_pvid": "7266193040", "__qc_wId": "29"})
            .with_data({"name": "lanTest", "password": "123456"})
            .validate()
            .assert_equal("status_code", 200)
            .assert_equal('headers."Content-Type"', "application/json; charset=utf-8")
            .assert_equal("body.code", 200)
            .assert_equal("body.msg", "ok")
        ),
    ]
if __name__ == "__main__":
    TestCaseDoctest().test_start()

执行httprunner测试用例

使用hrun doctest_test.py 或者 pytest  doctest_test.py 均可执行测试用例。

7.png

C:\github\baidutest\har>hrun doctest_test.py
2020-08-11 15:01:13.457c:\programs\python\python38\lib\site-packages\urllib3\request.py:171: InvalidProxyConfigurationWarning: Your proxy configuration specified an HTTPS scheme for the proxy. Are you sure you want to use HTTPS to contact the proxy? This most likely indicates an error in your configuration. Read this issue for more info: https://github.com/urllib3/urllib3/issues/1850
  return self.urlopen(method, url, **extra_kw)
 | INFO     | httprunner.make:__make:512 - make path: C:\github\baidutest\har\doctest_test.py
2020-08-11 15:01:13.495 | INFO     | httprunner.make:format_pytest_with_black:170 - format pytest cases with black ...
No Path provided. Nothing to do ?
2020-08-11 15:01:13.814 | INFO     | httprunner.cli:main_run:56 - start to run tests with pytest. HttpRunner version: 3.1.4
================================================= test session starts =================================================
platform win32 -- Python 3.8.5, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: C:\github\baidutest\har
plugins: forked-1.3.0, metadata-1.10.0, rerunfailures-9.0, allure-pytest-2.8.17, assume-2.2.1, html-2.1.1, xdist-1.34.0
collected 1 item
doctest_test.py .                                                                                                [100%]
================================================== 1 passed in 0.93s ==================================================
C:\github\baidutest\har>pytest doctest_test.py
================================================= test session starts =================================================
platform win32 -- Python 3.8.5, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: C:\github\baidutest\har
plugins: forked-1.3.0, metadata-1.10.0, rerunfailures-9.0, allure-pytest-2.8.17, assume-2.2.1, html-2.1.1, xdist-1.34.0
collected 1 item
doctest_test.py .                                                                                                [100%]
================================================== 1 passed in 0.84s ==================================================

生成接口测试报告

安装httprunner模块自动安装了pytest_html模块,可使用pytest doctest_test.py  --html=reports.html 命令执行用例并生成报告

9.png

8.png


C:\github\baidutest\har>pytest doctest_test.py  --html=reports.html
================================================= test session starts =================================================
platform win32 -- Python 3.8.5, pytest-5.4.3, py-1.9.0, pluggy-0.13.1
rootdir: C:\github\baidutest\har
plugins: forked-1.3.0, metadata-1.10.0, rerunfailures-9.0, allure-pytest-2.8.17, assume-2.2.1, html-2.1.1, xdist-1.34.0
collected 1 item
doctest_test.py .                                                                                                [100%]
-------------------------- generated html file: file://C:\github\baidutest\har\reports.html ---------------------------
================================================== 1 passed in 0.93s ==================================================

reports测试报告:

10.png


未完待续,下一节用例参数化与关联!!!!


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 当软件业务日志打印不全,无法实际确认软件最终执行SQL语句时,可以通过临时打开Mysql的全局日志开关,辅助定位。1、查看当前服务器数据库日志相关配置 show variables like 'general_log%'; +------------------+------------------------------+ | Variable_name    | Value                        | +-----...
            1 1 20406
            分享
          •   前言  随着一众国内外大模型免费开放API,零成本构建一些性能不是那么强的大模型应用成为了可能。作为Digital IDE的作者,锦恢在完成学业的同时也需要负责维护一些自己的开源项目。  在维护一个产品的时候,为了获得更好的用户反馈,我们往往会建立一个 QQ 群来和用户直接互动。  不过随着时间的推移,群内会有很多的问题变得重复,或者很多问题都可以从我们提供的官方文档中找到答案。当然,我们知道,大部分的人都是懒得去翻官方文档的。  于是我就想着能不能开发一个用于进行问题解决的 QA 机器人,这样就可以解放我的双手了,让我每天有更多时间和朋友打星际争霸。通过 5 天的开发,我上线了我的 QA...
            0 0 560
            分享
          •   美国司法部在周三提交的一份法庭文件中建议“禁止谷歌收购、投资或与任何控制消费者搜索信息的公司合作”。  有了解司法部想法的人对彭博社称,该条款旨在适用于谷歌对 Anthropic 的投资。如果联邦法官接受这一提议,谷歌将被迫解除与 AI 初创公司 Anthropic 的合作关系。  除此之外,反垄断执法人员还在法庭的文件中再次强调:谷歌必须剥离 Chrome 浏览器。他们援引了法官早先的一项裁决,称 Chrome 浏览器“强化”了谷歌的“统治”地位。  谷歌没有就这项具体条款进行回应,只是提到了它在周四发布的一篇博客,其中对司法部的提案进行了批评。  谷歌去年承诺向 Anthropic 投...
            0 0 51
            分享
          •   当我们需要在互联网上搜索一些信息时,往往会选择使用搜索引擎来获取更加准确和丰富的信息。Google搜索引擎是全球最大的搜索引擎之一,拥有着极其庞大的数据库和算法,可以根据关键词搜索出大量的相关信息。但是,当我们需要采集搜索结果中的URL时,手动复制粘贴会非常繁琐。因此,本文将介绍如何使用Python编写爬虫程序,自动爬取Google搜索结果中的URL。注意:谷歌爬取是要代理。  前置条件  在开始编写爬虫程序之前,需要确保已经安装了Python编程环境和一些必要的Python库,比如requests、re等。可以使用pip命令来安装这些库。  爬虫程序的实现  首先,我们需要设置请求头信息...
            0 0 690
            分享
      • 51testing软件测试圈微信