zoukankan      html  css  js  c++  java
  • 【HttpRunner v3.x】笔记—8.用例引用、变量传递

    看到这里,对于httprunner已经有了一个大概的了解,现在想对于一些比较重要或者常用的功能,进行一些实践操作。
    毕竟那谁说过,“纸上得来终觉浅,绝知此事要躬行。”

    上一篇提到了RunTestCase,里面有2个重要的特征:

    一个是在一个用例中引用另一个测试用例,另一个则是变量的导出与引用。

    那就先来实践一下这2个货。
    我用flask快速写了2个接口,以供在本地调用:

    from flask import Flask
    from flask import request
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    @app.route('/getUserName', methods=['GET'])
    def get_user_name():
        if request.method == 'GET':
            return {
            "username": "wesson",
            "age": "27",
            "from": "China",
        }
    
    @app.route('/joinStr', methods=['GET'])
    def str_join():
        if request.method == 'GET':
            str1 = request.args.get("str1")
            str2 = request.args.get("str2")
            after_join = str1 + " " + str2
            return {
                "result": after_join
            }
    
    if __name__ == '__main__':
        app.run()
    

    一共有2个接口:

    1. /getUserName,查询用户名,返回是我写死的字典。
    2. /joinStr,两个字符串拼接,返回的是拼接后的结果。

    一、编写测试用例

    根据之前学习过的,直接编写case,因为这个接口没有传参,cookie之类的,就省掉了,只是demo用。

    1. 接口:/getUserName

    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    
    
    class TestCaseRequestWithGetUserName(HttpRunner):
        config = (
            Config("test /getUserName")
                .base_url("http://localhost:5000")
                .verify(False)
        )
    
        teststeps = [
            Step(
                RunRequest("getUserName")
                    .get("/getUserName")
                    .validate()
                    .assert_equal("body.username", "wesson")
            ),
    
        ]
    
    
    if __name__ == "__main__":
        TestCaseRequestWithGetUserName().test_start()
    

    这里呢,步骤都有了,断言是验证返回的username字段值是不是“wesson”,运行一下,可以看到测试通过。

    2. 接口:/joinStr

    这个接口就需要2个传参了,那么在Step里通过.with_params()来传参。

    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    
    
    class TestCaseRequestWithJoinStr(HttpRunner):
        config = (
            Config("test /joinStr")
                .base_url("http://localhost:5000")
                .verify(False)
        )
    
        teststeps = [
            Step(
                RunRequest("joinStr")
                    .get("/joinStr")
                    .with_params(**{"str1": "hello", "str2": "wesson"})
                    .validate()
                    .assert_equal("body.result", "hello wesson")
            ),
    
        ]
    
    
    if __name__ == "__main__":
        TestCaseRequestWithJoinStr().test_start()
    

    这里传入的参数分别是“hello”、“wesson”,这个字符串在拼接的时候是加了一个空格的,所以断言的时候我预期的值是"hello wesson"。
    运行测试,可以看的测试通过。

    二、testcase引用&变量传递

    以上是2个分开的case,都可以分别正常运行。

    假设,/joinStr接口的第二个参数,是依赖/getUserName接口的返回,那么现在这2个testcase之间就有了依赖关系。

    那么在写/getUserName接口用例的时候,就需要去引用/joinStr的测试用例了,并且需要把/getUserName用例的变量导出来,/joinStr的测试用例传参时候使用。

    1. 首先,先修改/getUserName接口的case:

    from httprunner import HttpRunner, Config, Step, RunRequest
    
    
    class TestCaseRequestWithGetUserName(HttpRunner):
        config = (
            Config("test /getUserName")
                .base_url("http://localhost:5000")
                .verify(False)
                .export(*["username"])#这里定义出要导出的变量
    
        )
    
        teststeps = [
            Step(
                RunRequest("getUserName")
                    .get("/getUserName")
                    .extract()
                    .with_jmespath("body.username", "username")#提取出目标值,赋值给username变量
                    .validate()
                    .assert_equal("body.username", "wesson")
            ),
    
        ]
    
    
    if __name__ == "__main__":
        TestCaseRequestWithGetUserName().test_start()
    

    关注注释部分的代码,一个是config里定义了这个要导出的变量,另一个是在Step中,讲目标值提取出来,赋值给这个变量。

    2. 接下来,修改/joinStr接口的测试用例:

    from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
    from .get_user_name_test import TestCaseRequestWithGetUserName #记得要导入引用的类
    
    
    class TestCaseRequestWithJoinStr(HttpRunner):
        config = (
            Config("test /joinStr")
                .base_url("http://localhost:5000")
                .verify(False)
        )
    
        teststeps = [
            Step(
                RunTestCase("setUp getUserName")
                .call(TestCaseRequestWithGetUserName)#导入后就可以调用了
                .export(*["username"])#在RunTestCase步骤中定义这个变量的导出
            ),
            Step(
                RunRequest("joinStr")
                    .get("/joinStr")
                    .with_params(**{"str1": "hello", "str2": "$username"})#在第二个传参中引用导出的变量
                    .validate()
                    .assert_equal("body.result", "hello $username")#断言的预期值也引用变量
            ),
    
        ]
    
    
    if __name__ == "__main__":
        TestCaseRequestWithJoinStr().test_start()
    

    按照直接学习的内容,case已经修改好,现在运行/joinStr接口的测试用例,可以看到运行通过。

    刚接触httprunner的这个pytest格式的语法时候,感觉还不习惯,但是你跟着实践走下来,发现习惯的还是很快的,快动手试试吧。

  • 相关阅读:
    centos6.8安装JDK1.8
    尚硅谷 ActiveMQ
    Spring 注解版-事务实现
    nginx实现动静分离
    C/C++ 位域
    大小端模式
    C++find函数
    C++ transform
    C++ string的大小写转换
    C++ pair用法
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/13215627.html
Copyright © 2011-2022 走看看