pytest框架之fixture

1.在进行接口关联时,一般很多个接口共用一个上行接口(例如)登录,可以使用fixture定义一个测试夹具,将登录的接口写在框架的conftest.py文件中:

  @pytest.fixture(scope="session") 
  def login_fixture():
      keyword = Keyword()
      url = "http://xxxxxxxxxxx/s=api/user/login"
      pub_params = {"application": "app", "application_client_type": "weixin"}
      data = {"accounts": "xxxxx", "pwd": "xxxxxx"}
      response = keyword.request_post(url=url, params=pub_params, data=data)


      token = jsonpath.jsonpath(response.json(), "$..token")[0]

      return token

在需要用到登录接口的测试用例中,将这个夹具当做参数传入用例函数中,将夹具函数返回的值赋给变量token_value,在需要的地方直接引用这个变量

@allure.title("xxxxxxx")
 def test_02_addcart3(login_fixture):
       token_value = login_fixture
 
       url_cart = "http://xxxxxxxxxx?s=api/cart/save"
       pub_params = {"application": "app", "application_client_type": "weixin", "token": token_value}
       data1 = {
              "goods_id": "11",
                "spec": "",
                "stock": 5}
       response = keyword.request_post(url=url_cart, params=pub_params, json=data1)  
       return response.json()

注:运行方式选择:
1.一定要使用pytest框架的入口执行文件,才能在执行用例的过程中,自动将夹具应用
2.如果选择其他执行方式,如unittest,就会报错为:
TypeError: test_02_addcart3() missing 1 required positional argument: 'login_fixture'

若报错信息为:AttributeError:"str"object Has no attribute "iter_parents",可以试着降低稳定版的pytest版本重试

posted @ 2024-07-21 19:16  cherish-github123  阅读(5)  评论(0编辑  收藏  举报