HttpRunner3的HTTP请求是怎么发出去的

本文探讨了HttpRunner3中发送HTTP请求的实现过程。从TestCaseBasic类的teststeps列表开始,逐步解析Step类的RunRequest如何通过get、post等方法触发请求。通过源码分析,发现TRequest类用于数据验证,而真正的HTTP请求是通过HttpRunner类的__send_request方法,该方法基于requests库的Session进行重写,实现了HTTP请求的发送。
摘要由CSDN通过智能技术生成

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
在HttpRunner3的示例代码中,发送HTTP请求的代码是这样写的:

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


class TestCaseBasic(HttpRunner):

    config = Config("basic test with httpbin").base_url("https://httpbin.org/")

    teststeps = [
        Step(
            RunRequest("headers")
            .get("/headers")
            .validate()
            .assert_equal("status\_code", 200)
            .assert_equal("body.headers.Host", "httpbin.org")
        ),
        # 省略
        Step(
            RunRequest("post data")
            .post("/post")
            .with_headers(**{"Content-Type": "application/json"})
            .with_data("abc")
            .validate()
            .assert_equal("status\_code", 200)
        ),
        # 省略
    ]


if __name__ == "\_\_main\_\_":
    TestCaseBasic().test_start()

  • 类TestCaseBasic继承了类HttpRunner。
  • 在类TestCaseBasic的内部定义了teststeps列表,由多个Step类的实例对象组成。
  • 类Step初始化传入类RunRequest的方法get和post就把HTTP请求发出去了。

这到底是怎么实现的?

先看下RunRequest的源码:

class RunRequest(object):
    def \_\_init\_\_(self, name: Text):
        self.__step_context = TStep(name=name)

    def with\_variables(self, **variables) -> "RunRequest":
        self.__step_context.variables.update(variables)
        return self

    def setup\_hook(self, hook: Text, assign\_var\_name: Text = None) -> "RunRequest":
        if assign_var_name:
            self.__step_context.setup_hooks.append({assign_var_name: hook})
        else:
            self.__step_context.setup_hooks.append(hook)

        return self

    def get(self, url: Text) -> RequestWithOptionalArgs:
        self.__step_context.request = TRequest(method=MethodEnum.GET, url=url)
        return RequestWithOptionalArgs(self.__step_context)

    def post(self, url: Text) -> RequestWithOptionalArgs:
        self.__step_context.request = TRequest(method=MethodEnum.POST, url=url)
        return RequestWithOptionalArgs(self.__step_context)

    def put(self, url: Text) -> RequestWithOptionalArgs:
        self.__step_context.request = TRequest(method=MethodEnum.PUT, url=url)
        return RequestWithOptionalArgs(self.__step_context)

    def head(self, url: Text) -> RequestWithOptionalArgs:
        self.__step_context.request = TRequest(method=MethodEnum.HEAD, url=url)
        return RequestWithOptionalArgs(sel
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值