使用python测试框架完成自动化测试并生成报告-实例练习
练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告
''' 1、写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2、编写测试用例,不同的数据(你能想到的所有测试用例),并进行断言。除0的选择可以跳过skip,随机生成字符串功能可以断言是否包含你名字的缩写。 3、使用unittest框架+HTMLTestRunner,最后生成html报告 '''
import unittest import os import time import logging import ddt from HTMLTestRunner import HTMLTestRunner import randomtestData1 = [{'a':5,'b':1,'x':'+','result':6},{'a':5,'b':1,'x':'-','result':4},{'a':5,'b':1,'x':'*','result':5},{'a':5,'b':1,'x':'/','result':5}] testData2 = [{'string':'asd','stringType':'upper','result':'ASD'},{'string': 'ASD', 'stringType': 'lower','result':'asd'}]#被测函数 class test_demo():def jisuanqi(a,x,b):if x == '+':return a+belif x =='-':return a-belif x == '*':return a*belif x == '/':return a/belse:logging.info('只支持数字加减乘除四则运算')def translation(string,stringType):if stringType == 'lower':return string.lower()elif stringType == 'upper':return string.upper()else:print('ERROR:只支持大小写类型转换')def random_string(num):return random.random(num)#测试函数 @ddt.ddt class TestCases(unittest.TestCase):@classmethoddef setUpClass(cls):print('整个测试类运行前执行')def setUp(self):print("每个测试方法执行前运行一次")def tearDown(self):print("每个测试方法执行完后运行一次")@ddt.data(*testData1)def test_case_jisuanqi(self,data):result = test_demo.jisuanqi(data['a'],data['x'],data['b'])assert result == data['result']@ddt.data(*testData2)def test_case_translation(self,data):result = test_demo.translation(data['string'],data['stringType'])assert result == data['result']def test_case_randomString(self):pass@classmethoddef tearDownClass(cls):print("整个测试类运行完成后执行一次")#测试报告 if __name__ == '__main__':report_path = os.path.join(os.path.dirname(__file__), 'report')now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())filename = report_path + "/" + now + "_result.html"print('******************************************')suite = unittest.TestSuite()suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestCases))with open(filename, 'wb') as fp:runner = HTMLTestRunner(stream=fp,title='测试报告',description='测试用例')runner.run(suite)
练习二:使用pytest完成自动化测试并用allure生成测试报告
''' 建立一个登陆模块的测试用例,一个人力资源模块的测试用例,其中包括增删改查4个小功能,查询不需要登陆。 使用pytest,allure的方式,技术上要有登陆依赖用Fixture,conftest实现,要添加人员时有参数化,数据驱动, 使用文件或list/dict的方式传入数据。通过allure的添加附加信息,及各种信息包括feature,story,step,attach,title,discription等。 ''' conftest.py
@pytest.fixture(scope = 'module') def test_login(request):user = request.param['user']password = request.param['password']if user != 'linda':print('用户名错误')elif password != '888888':print('密码错误')else:print('登陆成功')yield # 模块执行完case后 在最后执行一遍teardown操作。print('执行teardown')print('推出登陆')
Pytest.py
import allure import pytest import os import subprocesstest_user_data = [{"user": "linda", "password": "888888"}]test_user_data1 = [{"user": "linda", "password": "888888"},{"user": "servenruby", "password": "123456"},{"user": "linda", "password": "123456"}]test_user_data2 = [{"name": "中国平安", "money": 999, "country": 'china'},{"name": "阿里巴巴", "money": 888, "country": 'jepan'},{"name": "拼多多", "money": 666, "country": 'USA'}]@allure.feature('测试登录模块') @pytest.mark.run(order = 1) #第一个执行 @pytest.mark.parametrize('test_login', test_user_data1, indirect=True) class TestLogin():def test_login_case1(self,test_login):assert 1 == 1@allure.feature('测试人事模块') @pytest.mark.parametrize('test_login', test_user_data, indirect=True) class TestPersion():@allure.story('测试用例:新增人员')@pytest.mark.parametrize('data',test_user_data2)def test_persion_add(self,test_login,data):with allure.step("步骤1"):allure.attach('说明')print('新增用户%s'%data['name'])@allure.story('测试用例:删除新增的人员')@pytest.mark.parametrize('data',test_user_data2)def test_persion_del(self,test_login,data):print('删除用户%s'%data['name'])
558 pytest -v -s PyTest.py --alluredir=./result/ 在测试执行期间收集结果
559 allure serve ./result/ 测试完成后查看实际报告, 在线看报告
相关文章:
使用python测试框架完成自动化测试并生成报告-实例练习
练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 1、写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2、编写测试用例,不同的数据(你能想到的所有测试用例),并进行断言。除0的…...
JavaWeb 实战 01 - 计算机是如何工作的
计算机是如何工作的1. 计算机发展史2. 计算机的基本组成2.1 冯诺依曼体系结构2.2 CPU的内部结构2.3 指令2.3.1 指令表2.3.1.1 寄存器2.3.2 CPU的工作流程2.4 小结3. 操作系统3.1 核心功能3.2 操作系统的软硬件结构3.3 什么是进程 / 任务3.4 进程管理3.4.1 管理3.4.2 PCB : 进程…...
线性代数学习-1
线性代数学习-1行图像和列图像行图像列图像总结本文转载于https://herosunly.blog.csdn.net/article/details/88698381 该文章本人认为十分有用,便自己敲一遍笔记加固印象原文链接 原文这个笔记感觉比我老师讲的更加透彻,清晰。很好的展示了线性代数的原…...
人工智能写的十段代码,九个通过测试了
“抢走你工作的不会是 AI ,而是先掌握 AI 能力的人” 编程测试 1. 我想用golang实现二叉树前序,请你帮我写一下代码。 // 定义二叉树节点 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }// 前序遍历 func PreOrderTraversal(root *Tre…...
巴塞尔问题数值逼近方法
巴塞尔问题:计算所有平方数的导数和 ∑n1∞1n2limn→∞(112122⋯1n2)\sum_{n1}^{\infty} \frac{1}{n^{2}}\lim _{n \rightarrow\infty}\left(\frac{1}{1^{2}}\frac{1}{2^{2}}\cdots\frac{1}{n^{2}}\right)n1∑∞n21n→∞lim(121221⋯n21) 其理论解为…...
【深度学习环境】Docker
1. Docker 相关安装配置 1.1 docker 安装 参考:https://www.runoob.com/docker/ubuntu-docker-install.html 1.2 nvidia-docker 安装 参考:https://zhuanlan.zhihu.com/p/37519492 1.3 代理加速 参考:https://yeasy.gitbook.io/docker_…...
基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAwesome
1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 目录 六、第三方图标库FontAwesome 1 安装FontAwesome 解决报…...
今天面了个腾讯拿25K出来的软件测试工程师,让我见识到了真正的天花板...
今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…...
OSG三维渲染引擎编程学习之六十九:“第六章:OSG场景工作机制” 之 “6.9 OSG数据变量”
目录 第六章 OSG场景工作机制 6.9 OSG数据变量 第六章 OSG场景工作机制 作为一个成熟的三维渲染引擎,需要提供快速获取场景数据、节点等信息,具备自定义数据或动画更新接口,能接收应用程序或窗口等各类消息。OSG三维渲染引擎能较好地完成上述工作,OSG是采用什么方式或工作…...
Tektronix泰克TDP3500差分探头3.5GHz
附加功能: 带宽:3.5 GHz 差分输入电容:≤0.3 pF 差分输入电阻:100 kΩ DC pk 交流输入电压:15 V >60 dB 在 1 MHz 和 >25 dB 在 1 GHz CMRR 出色的共模抑制——减少较高共模环境中的测量误差 低电容和电阻负载…...
轻松实现内网穿透:实现远程访问你的私人网络
导语:内网穿透是什么?为什么我们需要它?今天我们将介绍这个令人惊叹的技术,让你实现远程访问你的私人网络。 使用内网穿透,轻松实现外网访问本地部署的网站 第一部分:什么是内网穿透? 通俗解释…...
MySQL长字符截断
MySQL超长字符截断又名"SQL-Column-Truncation",是安全研究者Stefan Esser在2008 年8月提出的。 在MySQL中的一个设置里有一个sql_mode选项,当sql_mode设置为default时,即没有开启STRICT_ALL_TABLES选项时(MySQLsql_mo…...
python计算量比指标
百度百科是这么写的:量比定义:股市开市后平均每分钟的成交量与过去5个交易日平均每分钟成交量之比。计算公式:量比(现成交总手数 / 现累计开市时间(分) )/ 过去5日平均每分钟成交量。这里公式没有问题,但是…...
下拉框推荐-Suggest-SUG
什么是下拉框推荐 在我们使用各种app(飞猪)想要搜索我们想要的东西,假设我想要上海迪士尼的门票,那么精确的query是“上海迪士尼门票”,要打7个字,如果在你输入“上海”的时候app就推荐了query“上海迪士尼…...
Nmap的几种扫描方式以及相应的命令
Nmap是一款常用的网络扫描工具,它可以扫描目标网络上的主机和服务,帮助安全研究员了解目标网络的拓扑结构和安全情况。以下是Nmap的几种扫描方式以及相应的命令: 1.Ping扫描 Ping扫描可以用来探测网络上响应的主机,可以使用“-sn…...
Qt::QOpenGLWidget 渲染天空壳
在qt窗口中嵌入opengl渲染天空壳和各种立方体一 学前知识天空壳的渲染学前小知识1 立方体贴图 天空壳的渲染就是利用立方体贴图来实现渲染流程2 基础光照 光照模型3 opengl帧缓冲 如何自定义帧缓冲实现后期特效4 glsl常见的shader内置函数 glsl编程常用的内置函数二 shader代码…...
谷歌搜索技巧大全 | 谷歌高级搜索语法指令
谷歌搜索技巧是利用各种高级搜索语法或者搜索指令,让我们能够使用Google进行精确化的搜索,外贸找客户和学术文件查找都可以应用到这些搜索技巧。(大部分命令也适用百度搜索)。Google通过互联网收集数据,抓取有意义的信息,将其存储…...
JAVA开发(JAVA垃圾回收的几种常见算法)
JAVA GC 是JAVA虚拟机中的一个系统或者说是一个服务,专门是用于内存回收,交还给虚拟机的功能。 JAVA语言相对其他语言除了跨平台性,还有一个最重要的功能是JAVA语言封装了对内存的自动回收。俗称垃圾回收器。所以有时候我们不得不承认&#…...
你还不会用CAD一键布置停车位?赶紧学起来!
在设计CAD建筑图的过程中,你还在一个一个地画停车位吗?那未免也太低效了吧!今天,小编用浩辰CAD建筑软件来教大家一键布置停车位,赶紧学起来吧! 浩辰CAD建筑软件是行业应用最广泛的创新型建筑设计专业软件&…...
【MySQL之MySQL底层分析篇】系统学习MySQL,从应用SQL语法到底层知识讲解,这将是你见过最完成的知识体系
文章目录MySQL体系结构MySQL存储结构(以InnoDB为例)MySQL执行流程(以InnoDB为例)1. 数据写入原理2. 数据查询原理MySQL存储引擎1. 为什么需要不同的存储引擎2. 如何为数据指定不同的存储引擎,数据粒度又是多少3. MySQL…...
单核CPU是否有线程可见性问题?
本文仅是本人对问题的思考记录,并没有实操验证,有误请大家评论指出。 今天见到了一个经典的问题,单核CPU是否有线程可见性问题,学完操作系统应该可以直接回答,不会有线程安全问题。但如果结合JVM虚拟机来进行分析&…...
MyBatis 架构介绍
MyBatis 架构介绍MyBatis 架构图MyBatis 所解决的 JDBC 中存在的问题引用MyBatis 架构图 mybatis 配置:mybatis-config.xml,此文件作为 mybatis 的全局配置文件,配置了 mybatis 的运行环境等信息。另一个 mapper.xml 文件即 sql 映射文件,文件…...
加密算法---RSA 非对称加密原理及使用
加密算法---RSA 非对称加密原理及使用一 非对称加密原理介绍二 加密解密测试2.1 加密解密工具类2.2 测试一 非对称加密原理介绍 非对称加密算法中,有两个密钥:公钥和私钥。它们是一对,如果用公钥进行加密,只有用对应的私钥才能解…...
MySQL-查询语句
数据库管理系统的一个最重要的功能就是数据查询,数据查询不应只是简单查询数据库中存储的数据,还应该根据需要对数据进行筛选,以及确定数据以什么样的格式显示。MySQL提供了功能强大、灵活的语句来实现这些操作。下面是通过help帮助查看到的s…...
【算法】【数组与矩阵模块】求数组中需要排序的最短子数组长度
目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介绍 …...
centos安装Anaconda3
目录一、参考二、Anaconda简介1、用途2、关于anaconda三、下载安装1、下载2、安装anaconda3、配置环境遍历4、测试配置结果5、设置显示前缀一、参考 在centos上安装Anaconda 最新Anaconda3的安装配置及使用教程(附图文) 二、Anaconda简介 一句话&…...
【微信小程序】-- WXML 模板语法 - 列表渲染 -- wx:for wx:key(十二)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
【Linux】Linux中gcc/g++的使用
本期主题:程序的编译过程和gcc/g的使用博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐🍁 1.背景知识 预处理(进行宏替换,去注释,头文件的…...
【Spring Cloud Alibaba】(五)Dubbo启动报错?一直重连报错?你值得学习的是排查问题的方法
系列目录 【Spring Cloud Alibaba】(一)微服务介绍 及 Nacos注册中心实战 【Spring Cloud Alibaba】(二)微服务调用组件Feign原理实战 【Spring Cloud Alibaba】(三)OpenFeign扩展点实战 源码详解 【Spri…...
adb命令的使用
命令 连接机顶盒 adb connect [机顶盒ip]查看已连接设备 adb devices断开某个机顶盒的连接 adb disconnect [机顶盒ip] or adb disconnect [虚拟机名称]断开所有设备连接 adb disconnect获取 root 权限 adb root挂载文件系统 adb remount当想往移动设备端 push 文件时显…...
中国人做代购的网站/西安网站推广
原文链接:http://click.aliyun.com/m/13858/ 免费开通大数据服务:https://www.aliyun.com/product/odps目前人人都在谈大数据,谈DT时代,但是,大数据是什么,每个人都有自己的一个看法,好比盲人摸象ÿ…...
建设一个网站怎么赚钱/网站推广是做什么的
6.1 概述 创建每个过程时,应该假设它可能出现错误 ( 一 ) 错误来源: 编程员 环境方面(磁盘空间) 时间(未加载完毕) ( 二 ) 错误分类: 1 、编译 例如: 定义: Public sub MyProcedure(intMyVariable As Integer) 调用&am…...
微信上可以做网站吗/seo属于技术还是营销
FAIL_ON_SYMBOL_HASH_OVERFLOW 这个类型不存在。 问题的原因是jar包版本冲突。这个是在jackson的 since 2.4版本的包里面才有。2.3之前的版本是没有得。 这个存在2.4及以上才出现的,所以,实际运行的项目中jackson的jar冲突了。 我这儿的问题是flume的l…...
java网站开发的底层语言是/网站推广方法大全
一、DataTable.AcceptChanges()方法 提交自上次调用AcceptChanges()方法以来对该表进行的所有更改。调用AcceptChanges()时,任何扔处于编辑模式的DataRow对象将成功结束其编辑。DataRowState也会随之更改:所有状态为Added何Modified的行的状态都变为Unch…...
使用动易模版制作网站/重庆镇海seo整站优化价格
在监控大量服务器时,如果将所有的请求都发送到一个zabbix server上,将会对我们的zabbix server造成很大的压力,我们在规划多个区域或机房进行监控的时候,会考虑到使用zabbix proxy 来代理zabbix server 的部分功能。zabbix server…...
新疆交通建设管理局官方网站/优化培训课程
为什么80%的码农都做不了架构师?>>> 解决方案: 1.随便找一个你能运行的as项目 2.打开gradle-wrapper.properties,文件目录:项目/gradle/wrapper/gradle-wrapper.properties 3.复制distributionUrl这一整行的内容&…...