httprunner学习实践(二)--编写和运行

序言

httprunner的使用和其中的一些概念在官方的文档中已经详细说明,写这个学习记录是为了记录下自己的学习历程,能够在今后快速的深入学习和实践。没有提及的部分,请查看官方文档
版本:2.2.5

参考

HttpRunner V2.x 中文使用文档

录制和转换

录制和转换乘可运行的文件,在官方文档中有详细介绍

编写

首先,获取接口信息,根据实际情况,可以是项目文档,抓包,浏览器F12查看,通过微信开发者工具查看等。
可以使用Yaml/Json文件编写测试,推荐使用Yaml,它在文件中使用注释比较方便
在网上找了一个查询城市天气的接口,编写的yaml如下:

# 测试名称(必须的),String
name: 获取城市的天气
# 变量(可选的), List,被上级(testcases,testsuite)覆盖
variables:
   # 设置变量,城市
   city: 上海
# 默认域名(可选的).String
base_url: https://www.apiopen.top
# 请求参数(必须的), dict, 与request中的参数相同
request:
   method: GET
   url: /weatherApi
   params:
       # 通过 $+参数名称 的形式,应用变量
       city: $city
# 提取器(可选的), dict,提取返回参数
extract:
   code: content.code
# 验证(可选的), list
validate:
   - eq: [$code , 200]
   - eq: [content.msg, "成功!"]
# 前置处理(可选的),list
setup_hooks:
# 后置处理(可选的),list
teardown_hooks:

保存到项目下的 api文件夹,并命名为‘天气.yml’
cmd切换到项目目录,使用hrun运行测试文件

D:\SL\httpAutoTest>hrun api/天气.yml
INFO     Loading environment variables from D:\SL\httpAutoTest\.env
INFO     Start to run testcase: 获取城市的天气
获取城市的天气
INFO     GET https://www.apiopen.top/weatherApi
INFO     status_code: 200, response_time(ms): 1109.06 ms, response_length: 1088
bytes

.

----------------------------------------------------------------------
Ran 1 test in 1.114s

OK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\SL\httpAutoTest\reports\1564387261.html

运行成功后,到reports目录下查看生产的报表


Yaml参数

在编写api/接口名称.yml时,文件中的key如下:

# 测试名称(必须的),String
name:
# 无条件跳过测试(可选的),String,跳过测试的说明
skip:
# 条件为 true 时跳过测试(可选的)
skipIf:
# 条件为 false 时跳过测试(可选的)
skipUnless:
# 变量(可选的), List,被上级(testcases,testsuite)覆盖
variables:
# 默认域名(可选的).String
base_url:
# 请求参数(必须的), dict, 与request中的参数相同
request:
# 提取器(可选的), dict,提取返回参数
extract:
# 验证(可选的), list
validate:
# 验证(可选的), list,与validate相同
validators:
# 前置处理(可选的),list
setup_hooks:
# 后置处理(可选的),list
teardown_hooks:

可以通过查看源码runner.py->Runner->_run_test方法查看具体信息

request参数

request的参数与requests模块中的request参数相同,methodurl是必须参数,如果请求中使用的是json格式的请求的body,建议使用json参数,具体参数如下:

    def request(self, method, url, name=None, **kwargs):
        """
        Constructs and sends a :py:class:`requests.Request`.
        Returns :py:class:`requests.Response` object.

        :param method:
            method for the new :class:`Request` object.
        :param url:
            URL for the new :class:`Request` object.
        :param name: (optional)
            Placeholder, make compatible with Locust's HttpSession
        :param params: (optional)
            Dictionary or bytes to be sent in the query string for the :class:`Request`.
        :param data: (optional)
            Dictionary or bytes to send in the body of the :class:`Request`.
        :param headers: (optional)
            Dictionary of HTTP Headers to send with the :class:`Request`.
        :param cookies: (optional)
            Dict or CookieJar object to send with the :class:`Request`.
        :param files: (optional)
            Dictionary of ``'filename': file-like-objects`` for multipart encoding upload.
        :param auth: (optional)
            Auth tuple or callable to enable Basic/Digest/Custom HTTP Auth.
        :param timeout: (optional)
            How long to wait for the server to send data before giving up, as a float, or \
            a (`connect timeout, read timeout <user/advanced.html#timeouts>`_) tuple.
            :type timeout: float or tuple
        :param allow_redirects: (optional)
            Set to True by default.
        :type allow_redirects: bool
        :param proxies: (optional)
            Dictionary mapping protocol to the URL of the proxy.
        :param stream: (optional)
            whether to immediately download the response content. Defaults to ``False``.
        :param verify: (optional)
            if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided.
        :param cert: (optional)
            if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
        """

注意:httprunnertimeout的默认值为120

def request(self, method, url, name=None, **kwargs):
    .......
    kwargs.setdefault("timeout", 120)
    ......

运行参数

帮助

D:\SL\httpAutoTest>hrun -h
usage: hrun [-h] [-V] [--log-level LOG_LEVEL] [--log-file LOG_FILE]
            [--dot-env-path DOT_ENV_PATH] [--report-template REPORT_TEMPLATE]
            [--report-dir REPORT_DIR] [--failfast] [--save-tests]
            [--startproject STARTPROJECT]
            [--validate [VALIDATE [VALIDATE ...]]]
            [--prettify [PRETTIFY [PRETTIFY ...]]]
            [testcase_paths [testcase_paths ...]]

One-stop solution for HTTP(S) testing.

positional arguments:
  testcase_paths        testcase file path

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show version
  --log-level LOG_LEVEL
                        Specify logging level, default is INFO.
  --log-file LOG_FILE   Write logs to specified file path.
  --dot-env-path DOT_ENV_PATH
                        Specify .env file path, which is useful for keeping
                        sensitive data.
  --report-template REPORT_TEMPLATE
                        specify report template path.
  --report-dir REPORT_DIR
                        specify report save directory.
  --failfast            Stop the test run on the first error or failure.
  --save-tests          Save loaded tests and parsed tests to JSON file.
  --startproject STARTPROJECT
                        Specify new project name.
  --validate [VALIDATE [VALIDATE ...]]
                        Validate JSON testcase format.
  --prettify [PRETTIFY [PRETTIFY ...]]
                        Prettify JSON testcase format.

查看版本

D:\SL\httpAutoTest>hrun -V
2.2.4

指定测试路径

使用 HttpRunner 指定测试用例路径时,支持多种方式。

使用 hrun 命令外加单个测试用例文件的路径,运行单个测试用例,并生成一个测试报告文件:

hrun filepath/testcase.yml

将多个测试用例文件放置到文件夹中,指定文件夹路径可将文件夹下所有测试用例作为测试用例集进行运行,并生成一个测试报告文件:

hrun testcases_folder_path

指定日志等级

D:\SL\httpAutoTest>hrun api/天气.yml --log-level DEBUG
INFO     Loading environment variables from D:\SL\httpAutoTest\.env
DEBUG    Set OS environment variable: USERNAME
DEBUG    Set OS environment variable: PASSWORD
DEBUG    Set OS environment variable: salesmapi.benlai.com
INFO     Start to run testcase: 获取 城市 的天气
获取 城市 的天气
INFO     GET https://www.apiopen.top/weatherApi
DEBUG    request kwargs(raw): {'params': {'city': '上海'}, 'verify': True}
DEBUG    processed request:
> GET https://www.apiopen.top/weatherApi
> kwargs: {'params': {'city': '上海'}, 'verify': True, 'timeout': 120}
..............

输出日志到文件

指定日志文件输出路径,将在对应目录下生产日志文件

D:\SL\httpAutoTest>hrun api/天气.yml --log-file log.log
获取 城市 的天气
.

----------------------------------------------------------------------
Ran 1 test in 0.942s

OK

保存测试数据

D:\SL\httpAutoTest>hrun api/天气.yml --save-tests
INFO     Loading environment variables from D:\SL\httpAutoTest\.env
dump file: D:\SL\httpAutoTest\logs\天气.loaded.json
dump file: D:\SL\httpAutoTest\logs\天气.parsed.json
INFO     Start to run testcase: 获取 城市 的天气
获取 城市 的天气
INFO     GET https://www.apiopen.top/weatherApi
INFO     status_code: 200, response_time(ms): 958.06 ms, response_length: 1087 b
ytes

.

----------------------------------------------------------------------
Ran 1 test in 0.963s

OK
dump file: D:\SL\httpAutoTest\logs\天气.summary.json
INFO     Start to render Html report ...
INFO     Generated Html report: D:\SL\httpAutoTest\reports\1564465064.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容