前言
上一节我们讲到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()
- 登录用例成功后将必要参数提取并在全局的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()
- 下游用是一个登录后上传文件获取
downloadcode
的用例 - Step的第一个步骤用用了
RunTestCase()
表示调用登录用例
RunTestCase(name)
参数是步骤名称,RunTestCase还是一个Step,这个名称同样会在日志和报告中显示
image.pngwith_variables(**{key:value})
变量跟RunReques
t里的用法一样,注意这边如果赋值了和需要调用用例内部一样的变量会回以此处的为准
call(TestCaseName)
call()
即是调用的意思,传参指定你要引用的testcase
类名称
export(*["var1","var2"])
指定要导出的变量,以供后续Step
引用。这边的导出和被调用用例的导出只定义一处即可,如果两边都定义了,依然符合合并覆盖原则
顶层引用的参数覆盖原则
由于用例的独立性,在被调用用例本身就是一个可成功执行的用例,所以参数都是赋有实际值的,如果在调用的用例层,重复赋值了参数,会以调用层传递的参数为主,无论是全局参数还是局部参数。如调用层覆盖了Login用例的登录名和密码,会以此处的为准
image.png
网友评论