• httprunner(7)测试用例RunRequest


    测试用例分层

    每个测试用例都有1个或多个测试步骤(List[step]),每个测试步骤对应一个API请求或其他用例的引用。

    从上图分析,我们可以看到testsuite中包含了3个测试用例,testcase1中有4个请求和一个步骤teststep12,其中步骤teststep12依赖testcase2,testcase2中的步骤teststep22又依赖于testcase3。
    举例说明:模仿上面的用例,我们也写3个用例

    • testcase1:以最便宜的价格购买一瓶可口可乐(testcase1中的其中一个步骤需要调用testcase2)
    • testcase2:查询价格最低的250ml可口可乐,并进入首页(testcase2中的其中一个步骤需要调用testcase3)
    • testcase3:登录用户user1成功

    注意

    为了简单,在HttpRunner v2.x中的API概念已经被取消了。你可以将API定义为只有一个请求步骤的测试用例。
     

    测试用例的分层思想:

    • 测试用例(testcase)应该是完整且独立的,每条测试用例应该是都可以独立运行的(重要)
    • 测试用例是测试步骤(teststep)的有序集合
    • 测试用例集(testsuite)是测试用例的无序集合,集合中的测试用例应该都是相互独立,不存在先后依赖关系的,可以无序执行
       

    RunRequest

        teststeps = [
            Step(
                RunRequest("get with params")
                .with_variables(
                    **{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two(1, 2)}"}
                )
                .get("/get")
                .with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
                .with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
                .extract()
                .with_jmespath("body.args.foo2", "foo3")
                .validate()
                .assert_equal("status_code", 200)
                .assert_equal("body.args.foo1", "bar11")
                .assert_equal("body.args.sum_v", "3")
                .assert_equal("body.args.foo2", "bar21")
            ),
    

    从上述代码可知,teststeps中的RunRequest用于发送API请求和对响应结果进行提取和断言
    下面详细介绍里面各个方法的作用
     

    RunRequest(name)

    RunRequest的参数名用于指定teststep名称,它将显示在执行日志和测试报告中。
    RunRequest("get with params")这个步骤的名称就是get with params
     

    .with_variables

    设置测试步骤的变量。每个测试步骤的变量都是独立的,如果想在多个测试步骤中共享变量,需要在config variables中定义。
    注意:如果config variables和.with_variables里有重名的变量,那么当你引用这个变量的时候,Step变量会覆盖config变量。
     

    .method(url)

    设置http请求方法,比如get、post、put、patch、delete等等,后面再跟上路径
    注意:如果base_url在config中设置了,url只能是相对路径部分。

    # 用get方法访问路径为/getTime(相对路径)
    .get("/getTime")
    
    # 用post方法访问路径id=3(绝对路径)
    .post("http://www.baidu.com/getTime")
    

    .with_params

    设置url的query,以键值对的形式,相当于requests.request 中的params。

    .with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
    

    .with_headers

    设置请求的headers,相当于requests.request 中的headers。

    .with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
    

    .with_cookies

    设置Http请求cookies,相当于requests.request 中的cookies。
     

    .with_data

    设置Http的请求Body,相当于requests.request 中的data。

    .with_data("foo1=$foo1&foo2=$foo2&foo3=$foo3")
    

    .with_json

    设置Http请求json格式的Body,相当于requests.request 中的json。

    .with_json({"foo1": "foo1", "foo2": "foo2", "foo3": "foo3"})
    

    .extract

    利用jmespath提取Json Response body内容,

    .with_jmespath(jmes_path: Text, var_name: Text)
    

    .validate

    断言,我们测试最终就是要验证接口返回是否符合预期。
    格式:

    assert_XXX(jmespath: Text, expected_value: ANy, message: Text="")
    

    下图展示HttpRunner内置断言:

  • 相关阅读:
    Java内部类
    sql几种连接的区别
    常见的十大算法
    使用yml文件配置数据库数据时的问题
    SpringBoot整合Mybatis
    不是书评 :《我是一只IT小小鸟》
    考试考完了·
    MSSQL站库分离情况的渗透思路
    VENOM cve-2015-3456 Qemu 虚拟机逃逸漏洞POC
    Python 实现指定目录下 删除指定大小的文件
  • 原文地址:https://www.cnblogs.com/jiakecong/p/14385158.html
Copyright © 2020-2023  润新知