ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

接口自动化_pytest

2022-07-27 15:00:30  阅读:149  来源: 互联网

标签:url test 接口 用例 pytest 自动化 print def


一、pytest安装   

 插件安装:pip install -r xx.txt

pytest
pytest-html
pytest-xdist
pytest-ordering
pytest-rerunfailures
pytest-base-url
allure-pytest

二、pytest默认规则

1、模块名必须以test_或_test开头

2、测试类必须以Test开头,不能有init方法

3、测试方法必须以test_开头

三、pytest运行方式

1、命令行运行方式

  运行命令:pytest

  参数:

    -v  输出更详细的信息

    -s  输出调试信息

    -n 2 多线程

    --reruns 2  失败用例重跑

    --html  生成简易报告

  eg:pytest -vs --html=./reports/report.html     根目录下的repoets文件夹中生成repoet的html报告

2、主函数的运行方式 

if __name__ == '__main__':
pytest.main(['-vs'])

3、通过pytest.ini文件运行

[pytest]
# 配置参数 用例分组
addopts = -vs -m "smoke or usermanage"
# 配置测试用例文件夹 测试用例在test_case文件夹下
testpaths = ./test_case
# 配置测试用例模块的规则,以test开头可以自定义修改
python_files = test_*.py
# 配置测试用例类的规则
python_classes = Test*
# 配置测试用例方法的规则
python_functions = test_*
# 配置接口测试的基础路径
base_url = http://192.168.20.102:180/
# 给用例分组,自定义 用例上加上@pytest.mark.somking装饰器
markers=
smoke:冒烟测试
usermanage:用户登录

四、pytest执行顺序

默认:从上到下执行

可以通过@pytest.mark.run(order=1)去改变执行顺序 

五、pytest前置条件

def setup_class(self):
print("在类之前的操作")

def teardown_class(self):
print("在类之后的操作")

def setup(self):
print("在所有用例之前的前置操作")

def teardown(self):
print("在所有用例之后的后置操作")

在部分用例之前或之后执行,在类的外面使用Fixture函数

Fixture完整结构:

  @pytest.fixture(scope="作用域",params="数据驱动",autouse="自动执行",ids="参数别名",name="fixture别名")

  a、name使用后,原本的fixture名称已失效

  b、一把情况下fixture会和conftest.py文件一起使用

  c、conftest.py文件用于存放fixture,固定名称不可改变

  d、conftest.py文件可以有多个

1、自动执行所有   在conftest.py文件中

# 自动执行,所用用例之前都会执行 
@pytest.fixture(scope="class", autouse=True) # 类级别一般自动调用
def ceshi():
print("执行所有用例的前置")
yield "返回值"
print("执行所有用例的后置")

2、在某个用例中执行  将固件名称当成参数放入用例

# 数据驱动
def read_yaml():
return ['张三', '李四', '王五']
# 自动执行,所用用例之前都会执行
@pytest.fixture(scope="function",params=read_yaml()) # 函数级别一般手动调用
def ceshi(request):
print("执行所有用例的前置")
yield request.param
print("执行所有用例的后置")
# 通过order 123...标记去改变用例的执行顺序
@pytest.mark.run(order=1)
def test_get_token(self, ceshi1):
url = "http://192.168.20.102:180/flexbase/api/w/logon/login"
data = {
"username": "102_180",
"password": "1"
}
res = requests.request("post", url=url, data=data)
  print("返回值:"+ceshi1)

 六、统一请求封装:

class Request_Util:
  session = requests.Session()

  # 统一发送请求的方法
  def all_send_request(self, method, url, **kwargs):
   res = Request_Util.session.request(method, url, **kwargs)
   return res

 

class TestDemo:
  # 类变量
  token = ""

  # 通过order 123...标记去改变用例的执行顺序
  @pytest.mark.run(order=1)
  def test_get_token(self):
   url = "http://192.168.20.102:180/flexbase/api/w/logon/login"
   data = {
   "username": "102_180",
   "password": "1"
   }
   res = Request_Util().all_send_request("post", url=url, data=data)
   print(res.json())
   TestDemo.token = res.json()['data']['token'] # json提取器获取token
   print(TestDemo.token)

 

标签:url,test,接口,用例,pytest,自动化,print,def
来源: https://www.cnblogs.com/tfxbk/p/16524353.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有