分分28官网|分分28开奖网

原理:HttpRunner框架的初体验(六)
作者:周海峰   类型:测试开发    类别:原理   日期:2021-01-28    阅读:153 次   消耗积分:0 分

深入研究: 解决响应正文中数据类型与预期不一致导致的断言不通过。

       在完成前面基本使用的时候,发现了一些问题。比如登录时,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.mountsinaibaptistchurch.org/note/677
上一篇: 原理:HttpRunner框架的初体验(五)
下一篇: 访谈:周五被救护车拉走,周六还想着回来考试的他就业了,入职月薪16K!
提示:登录后添加有效评论可享受积分哦!