httprunner 3.x学习16 - 断言使用正则匹配(assert_regex_match)

前言

httprunner 3.x可以支持正则匹配断言,使用assert_regex_match方法

assert_regex_match

assert_regex_match 源码如下

def assert_regex_match(
self, jmes_path: Text, expected_value: Text, message: Text = ""
) -> "StepRequestValidation":
self.__step_context.validators.append(
{"regex_match": [jmes_path, expected_value, message]}
)
return self

校验方法是 regex_match ,于是找到httprunner/builtin/comparators.py

def regex_match(check_value: Text, expect_value: Any, message: Text = ""):
assert isinstance(expect_value, str), "expect_value should be Text type"
assert isinstance(check_value, str), "check_value should be Text type"
assert re.match(expect_value, check_value), message

断言结果返回的是re.match方法,传2个参数

  • expect_value   正则表达式

  • check_value    检查返回结果的字符串

使用示例

登录接口返回

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

{
"code":0,
"msg":"login success!",
"username":"test1",
"token":"2a05f8e450d590f4ea3aba66294a26ec3fe8e0cf"
}

assert_regex_match 方法第一个参数是jmes_path,提取返回的body,比如我要正则匹配token是40位16进制

.assert_regex_match("body.token", "[0-9a-f]{40}")

yaml文件示例

# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

config:
name: login case
variables:
user: test
psw: "123456"
base_url: http://127.0.0.1:8000
export:
- token

teststeps:
-
name: step login
variables:
user: test1
psw: "123456"
request:
url: /api/v1/login
method: POST
json:
username: $user
password: $psw
extract:
token: content.token
validate:
- eq: [status_code, 200]
- regex_match: [body.token, "[0-9a-f]{40}"]

pytest脚本

# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\login_var.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/

from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

class TestCaseLoginVar(HttpRunner):

config = (
Config("login case")
.variables(**{"user": "test", "psw": "123456"})
.base_url("http://127.0.0.1:8000")
.export(*["token"])
)

teststeps = [
Step(
RunRequest("step login")
.with_variables(**{"user": "test1", "psw": "123456"})
.post("/api/v1/login")
.with_json({"username": "$user", "password": "$psw"})
.extract()
.with_jmespath("body.token", "token")
.validate()
.assert_equal("status_code", 200)
.assert_regex_match("body.token", "[0-9a-f]{40}")
),
]

if __name__ == "__main__":
TestCaseLoginVar().test_start()

需注意的是正则匹配只能匹配字符串类型,不是字符串类型的可以用 jmespath 函数to_string()转字符串

.assert_regex_match("to_string(body.code)", "0")

上海-悠悠 blog地址https://www.cnblogs.com/yoyoketang/

(0)

相关推荐