我是耿晓,27 岁,在北京做了 5 年的软件测试。
近 4 年服务于一家医疗培训公司,平时在做功能测试之余,也会做接口测试相关。
在开荒、实践过程中会遇到很多问题,我会将阶段性的总结发布于此,渴望交流,希望佬儿哥佬儿姐们多多指点。
哇,实践了下,可以成功达到预期效果。过程和原因我得在思考消化下,谢谢。
方便加您一下微信吗,
GXY1162031010
试了下确实可以,但问题是 check_response 中的 return,不同的 fixture 需要返回数据的位置是不一样的,所以起初我才想的是将这个返回数据的位置作为参数传进来,然而作为参数传进来就无法按期望写 allure 附件了。
当前,我把写入 allure 附件的代码从 try 中提出来了,目前不论 fixture 自身报不报错,我都将请求和响应的相关信息写进附件。以下代码可以实现添加附件功能。可是我还是不太明了文中提到的问题原因,难道是因为在 try 中调用自定义方法导致达不到预期效果的?
# 向fixture中添加附件
def add_allure_attachment(url, data, resp):
allure.step("Check response status code and content")
allure.attach(
url,
name="request_url.txt",
attachment_type=allure.attachment_type.TEXT
)
allure.attach(
json.dumps(data, ensure_ascii=False, indent=2),
name="request_data.json",
attachment_type=allure.attachment_type.JSON
)
allure.attach(
json.dumps(resp.json(), ensure_ascii=False, indent=2),
name="response.json",
attachment_type=allure.attachment_type.JSON
)
allure.attach(
resp.text,
name="response.text",
attachment_type=allure.attachment_type.TEXT
)
# 实例化一个session,用于管理后台请求需要验证身份的接口
@pytest.fixture(scope="session")
def tf_getSession():
url = Environment.HOST_ADMIN + 'loginin'
data = {
'username': Environment.userphone_tea,
'password': Environment.password_tea
}
ses = requests.session()
resp = ses.post(url=url, data=data)
add_allure_attachment(url=url, data=data, resp=resp)
try:
assert resp.status_code == 200, f"Expected status code 200 but got {resp.status_code}"
assert resp.json()['code'] == 2000, f"Expected code {2000} but got {resp.json()['code']}"
return ses
except (AssertionError, IndexError) as e:
raise AssertionError(f"Fixture 断言失败") from e
不太明白还是,如果想提出来的话应该怎么提呢
针对一个测试点我们会设计多条用例,总不能一个测试点就一条 case 吧,像这样:
在 parametrize()里放 fixture 需要用 pytest-lazy-fixture。我有用过,像下面这样:
如果把造数放在用例内部,那最后的测试报告应该就会显示一条 case 吧,像上面的例子,如果把造数函数放在参数化里,allure 报告就会显示 6 条 case,以至于哪条 case 不通过显示的也比较明显
你说得对哦铁铁,使用生成器确实不能解决作者的问题,使用生成器只能解决写死数字致使的后续编辑时需要重新编辑排序数字的问题,并且是在特定的顺序执行的情况下才能达到预期效果。
那有什么好的办法可以解决及不想将排序写死,还能控制用例执行顺序的方法呢?
用 order 确实是控制用例执行顺序的好办法,但最大的弊端就是不利于修改,比如已经拍好了 order(1),order(2),,,后面编辑的时候要在其中插入一条 case,那就得重新遍历后面所有已经写好的序号。
我目前用的是生成器,可以有效解决后续编辑需要修改 order 编号的问题,大致如下:
load_cases() 里面的 order_id 是创建订单接口创建成功后返回的,并非测试前写死的。创建订单接口本身也要作为待测试接口,在此情况下,我是不是可以理解为在 load_cases() 里面将 create 接口默认认为是测试通过的接口,然后根据创建订单接口的返回值来构造 return 的值
我是耿晓,27 岁,在北京做了 5 年的软件测试。
近 4 年服务于一家医疗培训公司,平时在做功能测试之余,也会做接口测试相关。
在开荒、实践过程中会遇到很多问题,我会将阶段性的总结发布于此,渴望交流,希望佬儿哥佬儿姐们多多指点。