HttpRunner框架的初体验(六)文章摘要
深入研究: 解决响应正文中数据类型与预期不一致导致的断言不通过。
在完成前面基本使用的时候,发现了一些问题。比如登录时,yaml文件中只有响应状态码断言和响应正文内容格式断言,完成测试工作,如果只考虑这两种情况来确定用例是否通过肯定不够。所以,需要在yml(yaml文件也可以是yml)中添加正文内容的断言。
继续使用前面保存的login.yml文件完成正文断言:
testcase description
{}
- /agileone/index.php/common/login
admin
admin
application/x-www-form-urlencoded
empty
cors
same-origin
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
XMLHttpRequest
POST
http://localhost/agileone/index.php/common/login
- headers.Set-Cookie
- - status_code
- 200
- - headers.Content-Type
- text/html
- - body
-执行结果会出现错误:
E httprunner.exceptions.ValidationFailure: assert b'successful' equal successful(str) ==> fail
E check_item: b'successful'
E check_value: b'successful'(bytes)
E assert_method: equal
E expect_value: successful(str)
怎么让b'successful(bytes)' 转为 successful(str)问题困扰了我很久。当发现这个问题时,首先想到的是在yml中直接转码,但语法与python不一致.转码方法不能在yml中使用。搜索了百度、维基百科都没有相关的文章。最后我想到了httprunner源码文件。最后一搏,修改别人的源代码。
在python的set-package目录中找到httprunner目录,打开该目录并在ext目录中找到response.py。打开该模块,找到其中第245行:
:assert_func(check_value, expect_value, message) validate_msg += logger.info(validate_msg) validator_dict[] = ex: 在assert_func()的前面添加响应状态的转码代码 try: # change if resp's type is binary. if type(check_value) == bytes: check_value = check_value.decode() assert_func(check_value, expect_value, message) validate_msg += "\t==> pass" logger.info(validate_msg) validator_dict["check_result"] = "pass" except AssertionError as ex:
这个问题就解决了。
版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.woniuxy.com/note/677