HttpRunner-04:编写测试用例(校验A类IPv4)

1.需求

假设现在有一个需求,当访问http://www.httpbin.org/ip地址时,响应信息中包括origin字段,返回值为一个ip地址格式,需求是校验它是否符合A类的IPv4地址
引用维基百科解释:
image

A类IPv4地址经过进一步整理得到的范围为:1.0.0.1~127.255.255.254,即我们的需求目的就是校验origin字段返回值是否在A类IPv4地址范围内。

2.编写测试用例(yaml)

明确需求后,我们接下进入设计用例

首先,我们在debugtalk.py文件中定义一个校验是否为A类IPv4的方法,这样写的目的是为了在执行测试用例前,做一个前置判断,完成稍微复杂的测试场景

# add content to debugtalk.py
def is_valid_ipv4(origin):
    """
    check origin in 1.0.0.1~127.255.255.254 (class A ipv4)
    :param origin: ipv4
    :return: origin variable or None
    """
    if origin is None:
        return
    elif isinstance(origin, str):
        value_list = origin.split('.')
        if len(value_list) == 4:
            _ip = [int(s) for s in value_list]
            if 1 <= _ip[0] <= 127 and 0 <= _ip[1] <= 255 and 0 <= _ip[2] <= 255 and 1 <= _ip[3] < 255:
                return origin

其次,在testcase目录下新建一个文件,命名为:check_origin_ip.yml,编写一个测试用例,如下:

config:
    name: httpbin接口测试练习
    base_url: "http://www.httpbin.org"
    verify: False

teststeps:
-
    name: 检查是否为A类IPv4地址:1.0.0.1~127.255.255.254
#    variables:
#        origin: 192.168.1.111
    extract:
        origin: 'body.origin'
    request:
        method: GET
        url: /ip
        headers:
            User-Agent: HttpRunner/${get_httprunner_version()}
            Content-Type: "text/plain"
    validate:
        - eq: ['body.origin', "${is_valid_ipv4($origin)}", '不是A类IPv4地址?'] # 这里引用debugtalk文件定义的方法,写法:${调用函数},并且声明一个$origin参数,利用extract从当前 HTTP 请求的响应结果中提取参数

部分测试用例结构解释:
config

  • name(必须):测试用例的名称,将在log和报告中展示。
  • base_url(可选):测试用例中的通用Host,如果base_url被指定,测试步骤中的url只能写相对路径。当你要在不同环境下测试时,这个配置非常有用
  • verify(可选的):指定是否验证服务器的TLS证书。如果我们想记录测试用例执行的HTTP流量,这将特别有用,因为如果没有设置verify或将其设置为True,则会发生SSLError。

teststeps

  • name(必须):name用来定义测试步骤 name,将出现在log和测试报告中
  • variables(可选的):测试步骤中定义的变量,作用域为当前测试步骤。如果想在多个测试步骤中共享变量,需要在config variables中定义。测试步骤中的变量,会覆盖config variables中的同名变量。
  • extract(可选):从当前 HTTP 请求的响应结果中提取参数,并保存到参数变量中(例如token),后续测试用例可通过$token的形式进行引用。原理:利用jmespath 提取Json response body的内容。
  • request(必须):
    • METHOD(必须):http方法
    • URL(必须):设置Url,如果base_url在config中设置了,url只能是相对路径部分
    • HEADERS(可选):设置请求的headers
  • validate(可选):测试用例中定义的结果校验项,作用域为当前测试用例,用于实现对当前测试用例运行结果的校验。
    原理:用 jmespath 提取Json response的内容,并进行断言校验。

- 运算符: [jmespath表达式, expected_value, message]

运算符包括:

  • equal: 等于
  • contained_by: 实际结果是否被包含在预期结果中
  • contains: 预期结果是否被包含在实际结果中
  • endswith: 以...结尾
  • greater_or_equals: 大于等于
  • greater_than: 大于
  • length_equal: 长度等于
  • length_greater_or_equals: 长度大于等于
  • length_greater_than: 长度大于
  • length_less_or_equals: 长度小于等于
  • length_less_than: 长度小于
  • less_or_equals: 小于等于
  • less_than: 小于
  • not_equal: 不等于
  • regex_match: 字符串是否符合正则表达式匹配规则
  • startswith: 以...开头
  • string_equals: 字符串相等
  • type_match: 类型是否匹配
  • jmespath: jmespath表达式,详见JMESPath Tutorial
  • expected_value: 指定期望值或变量,也可以调用方法
  • message(optional): 用于描述断言失败原因

3.运行测试用例(并生成html格式报告)

使用hrun命令执行yaml文件,并且追加生成html报告的命令--html=report.html --self-contained-html

  • 执行测试用例的完整写法如下

rosaany@Rosefinch:~/demo$ hrun testcases/check_origin_ip.yml --html=report.html --self-contained-html
image

这时,在demo目录下生成一份report.html文件,生成的文件命名在执行测试用例时指定

image

最后,结果显示一共有测试用例1条,成功1条,说明实验结果符合设计预期。

posted @ 2021-12-01 11:59  Rosaany  阅读(303)  评论(0编辑  收藏  举报