httprunner2.x--HttpRunner断言:断言类型及断言名称
断言类型
在 comparators.py 文件中,定义了可以使用的断言类型:
- equals: 是否相等
- less_than: 小于
- less_than_or_equals: 小于等于
- greater_than: 大于
- greater_than_or_equals: 大于等于
- not_equals: 不等于
- string_equals: 字符串相等
- length_equals: 长度相等
- length_greater_than: 长度大于
- length_greater_than_or_equals: 长度大于等于
- length_less_than: 长度小于
- length_less_than_or_equals: 长度小于等于
- contains: 预期结果是否被包含在实际结果中
- contained_by: 实际结果是否被包含在预期结果中
- type_match: 类型是否匹配
- regex_match: 正则表达式是否匹配
- startswith: 字符串是否以什么开头
- endswith: 字符串是否以什么结尾
源码:\httprunner-2.5.5\httprunner\builtin\comparators.py
def equals(check_value, expect_value): assert check_value == expect_value def less_than(check_value, expect_value): assert check_value < expect_value def less_than_or_equals(check_value, expect_value): assert check_value <= expect_value def greater_than(check_value, expect_value): assert check_value > expect_value def greater_than_or_equals(check_value, expect_value): assert check_value >= expect_value def not_equals(check_value, expect_value): assert check_value != expect_value def string_equals(check_value, expect_value): assert builtin_str(check_value) == builtin_str(expect_value) def length_equals(check_value, expect_value): assert isinstance(expect_value, integer_types) expect_len = _cast_to_int(expect_value) assert len(check_value) == expect_len def length_greater_than(check_value, expect_value): assert isinstance(expect_value, integer_types) expect_len = _cast_to_int(expect_value) assert len(check_value) > expect_len def length_greater_than_or_equals(check_value, expect_value): assert isinstance(expect_value, integer_types) expect_len = _cast_to_int(expect_value) assert len(check_value) >= expect_len def length_less_than(check_value, expect_value): assert isinstance(expect_value, integer_types) expect_len = _cast_to_int(expect_value) assert len(check_value) < expect_len def length_less_than_or_equals(check_value, expect_value): assert isinstance(expect_value, integer_types) expect_len = _cast_to_int(expect_value) assert len(check_value) <= expect_len def contains(check_value, expect_value): assert isinstance(check_value, (list, tuple, dict, basestring)) assert expect_value in check_value def contained_by(check_value, expect_value): assert isinstance(expect_value, (list, tuple, dict, basestring)) assert check_value in expect_value def type_match(check_value, expect_value): def get_type(name): if isinstance(name, type): return name elif isinstance(name, basestring): try: return __builtins__[name] except KeyError: raise ValueError(name) else: raise ValueError(name) assert isinstance(check_value, get_type(expect_value)) def regex_match(check_value, expect_value): assert isinstance(expect_value, basestring) assert isinstance(check_value, basestring) assert re.match(expect_value, check_value) def startswith(check_value, expect_value): assert builtin_str(check_value).startswith(builtin_str(expect_value)) def endswith(check_value, expect_value): assert builtin_str(check_value).endswith(builtin_str(expect_value))
例如
- config: name: TestCase - test: name: TestStep -1 request: url: https://www.baidu.com/ method: GET headers: User-Agent: 'ozilla/5.0 (Windows NT 6.1; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0' validate: # 断言: 是否相等, 返回响应状态码是否为200 - equals: [status_code, 200] # 断言: 是否包含, 响应实体中是否包含 “title” 字符串 - contains: [content, title] # 断言: 是否以指定字符串开头, 响应实体是否以“<!DOCTYPE”字符串开头 - startswith: [body, <!DOCTYPE] # 断言: 是否大于, 响应头域数量是否大于 10 个 - length_greater_than: [headers, 10] # 断言: 是否类型匹配, 响应实体类型是否为“str”字符串类型 - type_match: [content, str]
比较器的名称
在 HttpRunner 中,将断言使用的比较器进行了名称的统一,每个比较器的名称可以有多种别名,如 equals 可以简写成 eq 、 == 或者 is 等名称。 象 eq、ge、gt 等写法,和 Linux 中的 shell 脚本比较符名称相同,可以进行类比记忆。
各比较器的名称整理如下:
源码\httprunner-2.5.5\httprunner\parser.py
def get_uniform_comparator(comparator): """ convert comparator alias to uniform name """ if comparator in ["eq", "equals", "==", "is"]: return "equals" elif comparator in ["lt", "less_than"]: return "less_than" elif comparator in ["le", "less_than_or_equals"]: return "less_than_or_equals" elif comparator in ["gt", "greater_than"]: return "greater_than" elif comparator in ["ge", "greater_than_or_equals"]: return "greater_than_or_equals" elif comparator in ["ne", "not_equals"]: return "not_equals" elif comparator in ["str_eq", "string_equals"]: return "string_equals" elif comparator in ["len_eq", "length_equals", "count_eq"]: return "length_equals" elif comparator in ["len_gt", "count_gt", "length_greater_than", "count_greater_than"]: return "length_greater_than" elif comparator in ["len_ge", "count_ge", "length_greater_than_or_equals", "count_greater_than_or_equals"]: return "length_greater_than_or_equals" elif comparator in ["len_lt", "count_lt", "length_less_than", "count_less_than"]: return "length_less_than" elif comparator in ["len_le", "count_le", "length_less_than_or_equals", "count_less_than_or_equals"]: return "length_less_than_or_equals" else: return comparator
例如
name: 断言的2种写法 request: url: https://www.baidu.com/ method: GET headers: User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 validate: # 断言一 - eq: [status_code, 200] # 断言二 - check: status_code comparator: eq expect: 200 # 等价断言一 - is: [status_code, 200] - ==: [status_code, 200] - equals: [status_code, 200]
执行后查看报告