pytest

python脚本实现接口自动化轻松搞定上千条接口用例

陌路散爱 提交于 2020-05-07 20:50:16
接口自动化目前是测试圈主流的一个话题,我也在网上搜索了很多关于自动化的关键词,大多数博主分享的python做接口自动化都是以开源的框架,比如:pytest、unittest+ddt(数据驱动) 最常见的。 这些框架的缺陷太多,如下列举几个: 1.无法实现参数关联:上个请求的结果是下个请求的参数,如token 2.接口请求参数名有重复的,目前未处理,如key1=value1&key1=value2,两个key都一样,这种需要用元组存储,无法判断 3.接口数据更新无法直接更新excel,仍需修改代码,对于新手产生很大的不便 4.对于新手不会代码的测试人员,不易管理 我将分享一个python编写的接口自动化脚本,可以完全解决上面框架实现出现的问题,基本上http请求的接口均通用,仅需在excel中编写接口用例无需更改代码! 采用同样是数据驱动方式,将数据和业务完全分离在excel表格中、代码无需变更,两部分分离的方式相互独立,代码简单好维护,单个脚本调试方便,不用关注代码编写,提高了效率,(懂基础python的测试人员)也可无限扩展。 核心的思想与开源工具是相同的:数据和测试代码分离 优点:足够灵活,可以随时根据需求进行变更扩展 测试结果:直接展示在excel中,一目了然 目前已实现的功能: 1.支持HTTP请求方式 2.支持上下接口参数关联:参数提取实现各种响应值取参 3.支持上传

pytest系列(四)- pytest+allure+jenkins

萝らか妹 提交于 2020-05-07 15:28:34
pytest是什么 pytest是python的一款测试框架,拥有unittest的功能并比它更丰富。 allure是什么 有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例执行过程和结果。 allure是一款开源的,专门用来展示测试结果的工具,目的是希望团队内部每一个人都可以看到非常清楚的测试结果。 allure可以与非常多的著名测试框架做集成。 像java语言,可以与junit4,junit5,TestNG测试框架集成。 python语言,可以与pytest,behave,nose测试框架集成。 allure会将测试用例的执行数据保存到xml文件当中,再利用allure的命令行将文件转换成html形式呈现出来。 allure的官方地址: http://allure.qatools.ru/ 安装allure命令行 官网提供了每个平台的,命令行安装方式。 以下是手动安装方式,适用于各平台: 1、从Maven Center下载最新的安装包: http://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/ 目前是2.12.1的版本。 2、将包解压到任何一个目录。建议不要选C盘或者路径很深的。比如D:\allure-command-2.12.1 3、跳转到解压后的bin目录下面

Allure安装、python+allure+jenkins自动化测试报告配置

廉价感情. 提交于 2020-05-07 15:28:12
1.安装allure 下载地址: http://allure.qatools.去掉ru/ 下载最新版本 需要java8+,JDK 1.8+环境,所以提前配置好java环境。安装完成后运行bin目录下的allure.bat 添加 安装路径\allure-2.13.1\bin至环境变量PATH 安装配置成功后,使用以下命令确保Allure可用。 2.Allure集成自动化测试流程 Allure的集成分为如下步骤: 1. 编写自动化测试工程实现“单元测试/API测试/UI测试” 2. 下载配置Allure服务 3. 在自动化测试工程中引入Allure支持 4. 在自动化测试工程中引入Allure注解 5. 指定配置文件,选择运行的测试套件 6. 运行Allure服务进行报告展示 3、在pycharm(cmd)中下载allure插件:pip install allure-pytest 在main.py文件中加入--alluredir=文件名/,然后运行 import pytest if __name__ == '__main__': pytest.main(['-m register', '-s', '--resultlog=reports/demo.txt', '--junitxml=reports/demo.xml', '--html=reports/demo.html', '-

2 个案例带你迅速入门 Python Flask 框架

|▌冷眼眸甩不掉的悲伤 提交于 2020-05-02 14:04:49
Flask 是 python 中非常流行的一个 web 框架,容易学习。这篇文章主要通过 2 个实际案例讲解 Flask 如何使用。第一个例子是实现一个调用公交车到站信息的接口服务;第二个例子是通过接口展示所有的测试报告。 Flask 安装 安装 python pip install flask flask 安装 Flask 启动服务 from flask import Flask app = Flask(__name__) app.run() 通过 3 行代码,可以启动一个 flask 的服务。 第一行,导入 第二行,创建 Flask 程序实例 第三行,通过实例启动服务 运行这个代码,可以在本地的 5000 端口访问, 得到结果是 404 页面无法找到: flask running.gif 为 Flask 程序添加接口 此时,访问 http://localhost:5000 看到 404 错误,是因为没有定义接口。 一个 url 地址和一个处理函数对应,就可以形成一个接口。 通过下面的 代码,可以在之前的代码基础上添加一个接口: @app.route('/') def index () : return { "msg" : "success" , "data" : "welcome to use flask." } 接口添加完成后,再次访问 http://localhost

不能在Python Console中运行pytest

自古美人都是妖i 提交于 2020-05-02 06:07:36
在Python Console中运行pytest发现报错了 这是为什么?因为Python Console已经是进入python之后的环境,就像在python自带的IDLE中运行pytest pytest的运行是不需要进入python环境的,因此可以在Terminal命令行中运行pytest,结果是ok的 来源: oschina 链接: https://my.oschina.net/u/4323462/blog/3887152

How to install Python (dev) dependencies globally so that I don't have to reinstall them in every venv?

匆匆过客 提交于 2020-04-30 08:47:15
问题 There are a few Python dependencies that I would like to be available in every venv (virtual environment) that I create for each project. For example black, flake8 and pytest. Is that possible and if so, how to achieve that? I'd like to install these three once under my main Python installation, instead I have to reinstall all of them in every venv that I create when I start a new project. This is specially annoying when using VSCode which throws popups complaining about "Linter flake8 is not

How to install Python (dev) dependencies globally so that I don't have to reinstall them in every venv?

半世苍凉 提交于 2020-04-30 08:46:11
问题 There are a few Python dependencies that I would like to be available in every venv (virtual environment) that I create for each project. For example black, flake8 and pytest. Is that possible and if so, how to achieve that? I'd like to install these three once under my main Python installation, instead I have to reinstall all of them in every venv that I create when I start a new project. This is specially annoying when using VSCode which throws popups complaining about "Linter flake8 is not

python-pytest学习

帅比萌擦擦* 提交于 2020-04-30 03:22:51
一:pytest基于unittest之上的单元测试框架 1.自动发现测试模块和测试方法; 2.断言使用assert+表达式即可; 3.可以设置会话级、模块级、类级、函数级的fixtures :数据准备+清理工作 4.丰富的插件库 http://plugincompat.herokuapp.com/ 安装命令 pip install pytest 安装html报告的插件:pip install pytest-html 二:pytest收集测试用例的规则: 1.默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,就从哪个目录中搜索; 2.搜索规则: 1)先找py文件。test_*.py或者*_test.py 2) 找模块下面,以test_开头的函数名称。 3)找模块下面,以Test开头的类(没有__init__函数)中,找以test_开头的函数。 三:pytest 之 mark 对测试用例打标签。执行用例就可以根据标签过滤用例。 标记功能:测试类和测试用例前面 ,@pytest.mark.标签名 四:pytest 之 定义fixture @pytest.fixture(scope=) def init_web(): #前置 yield 返回值 #后置 1. fixture : 即测试用例执行的环境准备和清理。 2. 在unittest中即指:setup()

Pytest学习笔记(二) 用例执行规则

醉酒当歌 提交于 2020-04-30 02:30:11
在用pytest执行用例时,可以按照如下场景来执行 1、执行目录及其子目录下的所有用例 pytest filename\ 2、执行某一个py文件下的用例 pytest filename.py 3、-k 按关键字匹配 pytest test_class.py -k " TestClass and not two " 运行test_class.py中的TestClass.test_one,不运行TestClass.test_two。 4、按节点运行 每个收集的测试都分配了一个唯一的nodeid,由模块文件名后跟说明符组成。 运行文件中某个测试用例: pytest test_sample.py::test_answer # 文件名::函数名 运行文件中某个测试类中的某个用例: pytest test_class.py::TestClass::test_one # 文件名::类名::函数名 5、-m执行标记用例 执行通过mark标记的所有测试用例。 在test_class.py文件中编写如下代码 import pytest class TestClass(object): @pytest.mark.webtest def test_one(self): x = " this " assert ' h ' in x def test_two(self): x = " hello "

Pytest使用自定义标记mark只执行部分用例

怎甘沉沦 提交于 2020-04-30 02:28:53
• 场景:只执行符合要求的某一部分用例 可以把一个web项目划分多个模块,然后指定模块名称执行。 App自动化时,如果想Android和IOS公用一套代码时,也可以使用标记功能,标明哪些是IOS 的用例,哪些是Android的,运行代码时指定mark名称运行就可以。 • 解决: • 在测试用例方法上加@pytest.mark.webtest • 执行: • -s参数: 输出所有测试用的print信息 -m:执行自定义标记的相关用例 • pytest -s test_mark_zi_09.py • pytest -s test_mark_zi_09.py -m=webtest • pytest -s test_mark_zi_09.py -m apptest • pytest -s test_mark_zi_09.py -m "not ios" import pytest @pytest.mark.webtest def test_send_http(): print('webtest----------->>>>>') @pytest.mark.apptest() def test_devide(): pass @pytest.mark.android def test_search(): print('android------->>>>') @pytest.mark.ios