HttpRunner3.X学习笔记(5)- 用例文件的Step-

2020-09-20  本文已影响0人  是立品啊

前言

上一节我们讲到RunRquest,是在一个测试用例的步骤中发起API的请求,为了保证用例的独立性,在一个用例中也是可以对其他用例进行调用的,RunTestCase就是在当前用例中对其他测试用例进行调用也是Step的子参数之一,作用是在用例步骤中引用其他的用例。
看例子:登录后获取token等参数,传入下一个用例,因为登录用例很常用,所以将登录用例的用例单独写成一个用例文件

from api.common.login import Login
from httprunner import HttpRunner, Config, Step, RunRequest


class ProviderLogin(HttpRunner):
    config = (
        Config("admin端登录成功")
            .base_url("https://p-test92.aiyuangong.com")
            .variables(**{
            "loginName": "console-provider",
            "password": "123456"
        })
            .verify(False)
        .export(*["userid","access_token"])
    )
    teststeps = [
        Step(
            RunRequest("登录请求")
                .post(Login.path).with_json(Login.json)
                .extract()
                .with_jmespath("body.data.userProfiles[0].id", "userid")
                .with_jmespath("body.data.access_token", "access_token")
                .validate()
                .assert_equal("body.code", 200)
        )
    ]


if __name__ == '__main__':
    ProviderLogin().test_start()
  1. 登录用例成功后将必要参数提取并在全局的Config中导出export(*["userid","access_token"]),方便下一个用例做关联。
from httprunner import HttpRunner, RunRequest, RunTestCase,Step, Config
from api.common.login import Login
from api.common.upload import Upload
from testcases.common.p_login_success import ProviderLogin


class TestUploadFileAndGetDownloadCode(HttpRunner):
    config = (
        Config("上传文件获取downloadcode")
            .base_url("https://p-test92.aiyuangong.com")
            .variables(**{
            "loginName": "console-provider",
            "password": "123456",
            "fileName_": "pkq.jpeg",
            "file_": "file/pkq.jpeg"
        })
    )
    teststeps = [
      Step(
        RunTestCase("登录后获取token")
          .call(ProviderLogin)
          .export(*["userid","access_token"])

      ),

      Step(
        RunRequest("上传文件")
        .post(Upload.path)
        .with_headers(**{
          "Cookie": "x - sec - profile =$userid;AYG_SESSIONID =$access_token"
        })
        .upload(**Upload.file)
        .extract()
        .with_jmespath("body.data.downloadCode","downloadCode")
        .with_jmespath("body.data.fileName","fileName")
        .with_jmespath("body.data.referID","referID")
        .validate()
        .assert_equal("body.code",200)
      )

    ]

if __name__ == '__main__':
    TestUploadFileAndGetDownloadCode().test_start()
  1. 下游用是一个登录后上传文件获取downloadcode的用例
  2. Step的第一个步骤用用了RunTestCase()表示调用登录用例

RunTestCase(name)

参数是步骤名称,RunTestCase还是一个Step,这个名称同样会在日志和报告中显示

image.png

with_variables(**{key:value})

变量跟RunRequest里的用法一样,注意这边如果赋值了和需要调用用例内部一样的变量会回以此处的为准

call(TestCaseName)

call()即是调用的意思,传参指定你要引用的testcase类名称

image.png

export(*["var1","var2"])

指定要导出的变量,以供后续Step引用。这边的导出和被调用用例的导出只定义一处即可,如果两边都定义了,依然符合合并覆盖原则

image.png

顶层引用的参数覆盖原则

由于用例的独立性,在被调用用例本身就是一个可成功执行的用例,所以参数都是赋有实际值的,如果在调用的用例层,重复赋值了参数,会以调用层传递的参数为主,无论是全局参数还是局部参数。如调用层覆盖了Login用例的登录名和密码,会以此处的为准

image.png
上一篇 下一篇

猜你喜欢

热点阅读