pytest数据驱动(最简单)

第一种:通过yaml文件获取数据(一维列表)

data.yaml文件内容如下:

- 软件测试 - 单元测试 - 自动化测试 - 性能测试 - 测试开发 - 测试架构师

测试用例内容如下:

@pytest.mark.parametrize(data,  yaml.load(open(data.yml, r)))
def test_ddt(data):

  url=https://www.baidu.com/search/query?key=
  header = {Accept: "application/json",
      Content-Type: "application/json; charset=utf-8",
      Accept-Encoding: "gzip, deflate, br"}

  res=requests.get(url+data, header)
  assert res.status_code==200

第二种:通过yaml文件获取数据(二维列表)

data.yaml文件内容如下:

#用例1
-
api_name: page_title
url: http://www.baidu.com/
header = {Accept: "application/json",
     Content-Type: "application/json; charset=utf-8",
     Accept-Encoding: "gzip, deflate, br"}
data: {
"status_code": 200
}
#用例2
-
api_name: searching
url: http://www.baidu.com/
header = {Accept: "application/json",
     Content-Type: "application/json; charset=utf-8",
     Accept-Encoding: "gzip, deflate, br"}
data: {
"status_code": 200
}
#用例3
-
api_name: login
url: http://www.baidu.com/
header = {Accept: "application/json",
     Content-Type: "application/json; charset=utf-8",
     Accept-Encoding: "gzip, deflate, br"}
data: {
"status_code": 200
}

测试用例内容如下:

@pytest.mark.parametrize(data, yaml.load(open(data.yml, r)))
def test_ddt(data):
       api_name = data[api_name]
  url=data[url]
  header = data[header]

  res=requests.get(url + api_name, header)
  assert   res.status_code ==data[data][status_code]

第三种:通过yaml文件获取数据(@pytest.fixture)

@pytest.fixture()
def login(request):
  name = request.param
  print(f"== 账号是:{name} ==")
  return name

data = ["pyy1", "polo"]

@pytest.mark.parametrize("login", data, indirect=True)
def test_name(login):
  print(f" 测试用例的登录账号是:{login} ")
@pytest.fixture()
def logins(request):
  param = request.param
  print(f"账号是:{param[username]},密码是:{param[pwd]}")
  return param

data = [ {"username": "name1", "pwd": "pwd1"},  {"username": "name2", "pwd": "pwd2"} ]

@pytest.mark.parametrize("logins", data, indirect=True)
def test_name_pwd(logins):
  print(f"账号是:{logins[username]},密码是:{logins[pwd]}")
# 多个fixture
@pytest.fixture(scope="module")
def input_user(request):
  user = request.param
  print("登录账户:%s" % user)
  return user

@pytest.fixture(scope="module")
def input_psw(request):
  psw = request.param
  print("登录密码:%s" % psw)
  return psw

data = [("name1", "pwd1"),  ("name2", "pwd2")]

@pytest.mark.parametrize("input_user,input_psw", data, indirect=True)
def test_more_fixture(input_user, input_psw):
  print("fixture返回的内容:", input_user, input_psw)



name = ["name1", "name2"]
pwd = ["pwd1", "pwd2"]

@pytest.mark.parametrize("input_user", name, indirect=True)
@pytest.mark.parametrize("input_psw", pwd, indirect=True)
def test_more_fixture(input_user, input_psw):
  print("fixture返回的内容:", input_user, input_psw)

资料获取方法

【留言777】

三连之后我会在评论区挨个私信发给你们~

经验分享 程序员 微信小程序 职场和发展