中企动力 > 头条 > python用于测试

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python用于测试

4个不错的Python自动化测试框架,Robot Framework有哪些优势? 流量视频课程

img

Rouen

关注

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整,这些自动化测试框架就能够开箱即用,大大节省了测试时间。而且由于这些框架被广泛使用,他们具有很好的健壮性,并且具有广泛多样的用例集和技术来轻易发现微小的缺陷。

以前,测试团队接手一个项目,他们不得不为这个项目构建一个自动化测试框架。一个测试框架应该具有最佳的测试用例、假设(assumptions)、脚本和技术来运行每一处代码和模块,从而发现代码缺陷和不足。不同的项目需要不同的测试用例、假设和脚本,而这也是为什么会在这些测试中花费大量时间。然而,现在令测试人员万分高兴的是,构建自己的测试框架的日子终于结束了。今天,我们就聊一聊可用的 Python 自动化测试框架。

Robot Framework

链接:http://robotframework.org/

Robot Framework(RF)是用于验收测试和验收测试驱动开发(ATDD)的自动化测试框架。 基于 Python 编写,但也可以在 Jython(Java)和 IronPython(.NET) 上运行,提供跨平台支持( Windows、 Linux 或 MacOS )。

优点:

通过使用关键字驱动测试(KDT)方法简化了自动化测试过程,方便测试人员创建易读的测试。

测试数据语法简单易用。

生态系统丰富。由各种通用测试库和工具组成,这些工具都是作为独立项目开发的。

具有高度可扩展性。

可通过 pabot 或 Selenium Grid 执行并行测试。

缺点:

自定义 HTML 报告较为麻烦。

如果是针对大范围的库和扩展的 KDT 自动化测试,建议使用此跨平台框架。如果想要添加新的关键字(通过 RF 测试库 API ),需要具备 Java / Python / C 语言的基础知识。

RedwoodHQ

链接:http://redwoodhq/

RedwoodHQ 是一个流行的自动化测试工具,它之所以流行是因为大部分流行的编程语言都可以用来编写测试,例如 Java、Python、C# 等。在 RedwoodHQ 的网站界面上,多个测试人员可以在一个平台上协作并运行测试用例。开发者可以使用 RedwoodHQ 中出现的 action 关键字来毫不费力地创建和修改测试用例。

你需要做的只是找到需要的 action,拖到测试盒中,然后输入参数并改变它们的值来生成一份完整的测试报告。RedwoodHQ 有一个内置的 IDE(集成开发环境),可以在那里创建、修改以及运行测试用例。RedwoodHQ 是对用户最友好或对测试人员最友好的平台之一,它关注一个重大项目的全部测试过程。

Jasmine

链接:https://jasmine.github.io/

Jasmine 是一个 JavaScript 单元测试框架, 也被称为 JavaScript 的行为驱动开发(BDD)测试框架。适用于网页、Node.js 项目或任何可以运行 JavaScript 的地方。它主要与 AngularJS 配对使用。

优点:

除了 JavaScript ,还可以运行在 Python 和 Ruby 中。如果想在你的服务器端运行客户端测试,它可以帮助你。

被许多 CIs 使用和支持。

内置用于断言的语法。

缺点:

多数情况下,它需要一个测试运行器(如 Karma )。

难以异步测试。

如果你正在寻找一个统一的(客户端 - 服务器)单元测试解决方案,Jasmin 可能会非常适合。

Pytest

链接:https://docs.pytest.org/en/latest/

如果你的项目比较小、复杂度比较低,Pytest 是最适合的自动化测试平台。pytest 是 python 的一种单元测试框架,与 python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高。根据 pytest 的官方网站介绍,它具有如下特点:

非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

能够支持简单的单元测试和复杂的功能测试

支持参数化

执行测试过程中可以将某些测试跳过,或者对某些预期失败的 case 标记成失败

支持重复执行失败的 case

支持运行由 nose , unittest 编写的测试 case

具有很多第三方插件,并且可以自定义扩展

方便的和持续集成工具集成

Pytest 还有各种可用插件来给现有测试技术和测试用例增加更多功能和多样性。事实上,在其活跃社区中有 300 多个可用的插件。该平台设计用于编写更简单,错误率更小的代码。你可以将 Pytest 与诸如 Selenium 和 Splinter 之类的图形用户界面一起使用,来使测试工作更轻松。

结语

对于任何编程语言来说,都没有绝对理想的测试框架。它取决于测试者的舒适度、项目需求和项目中特定模块所需的测试类型。可用的自动化测试框架有线性自动化、基于模块的测试、函数库框架测试、混合测试、关键词驱动和数据驱动测试等。每个框架都有它的优点和缺点。上面列举的 python 框架是性能最全面的自动化测试框架。

关注51Testing软件测试网,提升it技能,从不会到熟练只差一步。

教你在Python中用Scikit生成测试数据集(附代码、学习资料) 公司视频课程

img

聆回

关注

原文标题:How to Generate Test Datasets in Python with Scikit-learn

作者:Jason Brownlee

翻译:笪洁琼

校对:顾佳妮

本文共1754字,建议阅读3分钟。

本文教大家在测试数据集中发现问题以及在Python中使用scikit学习的方法。

测试数据集是一个小型的人工数据集,它可以让你测试机器学习算法或其它测试工具。

测试数据集的数据具有定义明确的性质,如线性或非线性,这允许您探索特定的算法行为。

scikit-learn Python库提供了一组函数,用于从结构化的测试问题中生成样本,用于进行回归和分类。

在本教程中,您将发现测试问题以及如何在Python中使用scikit学习。

完成本教程后,您将知道:

如何生成多分类预测问题

如何生成二分类预测问题

如何生成线性回归预测测试问题

让我们开始吧

教程概述

本教程分为三个部分,分别是:

测试数据集

分类测试问题

回归测试的问题

测试数据集

开发和实现机器学习算法遇到的问题是,您如何知道是否正确地实现了机器学习算法。

即使存在bug有些算法还是能执行。

测试数据集是一个较小的人为设计问题,它允许您测试和调试算法和测试工具。

它们还能帮助更好地理解算法的行为,以及超参数是如何在相应算法的执行过程进行改变的。

下面是测试数据集的一些理想属性:

它们可以快速且容易地生成。

它们包含“已知”或“理解”的结果与预测相比较。

它们是随机的,每次生成时都允许对同一个问题进行随机变量的变化。

它们很小,可以很容易在两个维度中进行可视化。

它们也可以被简单地放大。

我建议在开始使用新的机器学习算法或开发新的测试工具时使用测试数据集。

scikit-learn是一个用于机器学习的Python库,它提供了生成一系列测试问题的功能。

在本教程中,我们将介绍一些为分类和回归算法生成测试问题的例子。

分类测试问题

分类是把标签分配给观测样本的问题。

在这一节中,我们将讨论三种分类问题:斑点、月亮和圆圈。

斑点分类问题

make_blob()函数可用于生成高斯分布的点。

您可以控制生成多少个斑点,以及生成的样本数量,以及其他一些属性。

如果这些斑点有线性可分的性质,那么这个问题适用于线性分类问题。

下面的例子生成一个带有三类斑点的二维数据集,作为一个多类分类预测问题。

每个观察都有两个输入和0、1或2个类值。

完整代码如下

运行这个示例会生成问题的输入和输出,然后创建一个方便的2D绘图,用不同的颜色显示不同的类。

注意,由于问题生成器的随机特性,您的特定数据集和结果图将会有所不同。

这是一个特性,而不是一个bug。

测试分类问题的散点图

我们将在下面的示例中使用这个相同的示例结构。

卫星分类问题

make_moons()函数是用于二分类问题的的,它将生成像漩涡一样,或者像月亮形状一样的数据集。

你可以控制月亮的形状和产生的样本数量。

这个测试问题适用于能够学习非线性类边界的算法。

下面的例子产生了一个带有中等噪声的月球数据集。

完整的代码如下

运行该示例将生成并绘制用于检查的数据集,再次为其指定的类着色。

卫星测试分类问题散的点图

圈分类问题

make_circles()函数会产生一个二分类问题,这个问题会出现在一个同心圆中。

再一次,就像卫星测试的问题一样,你可以控制形状中噪音的大小。

该测试问题适用于能够学习复杂非线性曲线的算法。

下面的示例生成一个带有一些噪声的圆形数据集。

完整的代码如下

运行该示例将生成并绘制用于检查的数据集。

圆试验分类问题的散点问题

回归测试的问题

回归是预测某个观测量的问题。

make_regression()函数将创建一个带有输入和输出之间线性关系的数据集。

您可以配置示例的数量、输入特性的数量、噪声级别,等等。

这个数据集适用于能够学习线性回归函数的算法。

下面的示例将生成100个示例,其中包含一个输入特性和一个输出特性,它的噪声很低。

完整的代码如下。

运行该示例将生成数据,并绘制X和y关系图,由于该关系是线性的,因此非常无趣。

回归测试问题的散点图

延伸

本节列出了一些扩展您可能希望探索的教程的想法。

比较算法

选择一个测试问题,并对问题的算法进行比较,并报告性能。

扩大的问题

选择一个测试问题,并探索扩大它的规模,使用改进的方法来可视化结果,或者探索给定的算法的模型技巧和问题深度。

额外的问题

这个库提供了一系列额外的测试问题;

为每个人编写一个代码示例来演示它们是如何工作的。

如果您探究这些扩展的任何一个,我很想知道。

进一步的阅读

如果您希望深入研究,本节将提供更多关于主题的参考资料。

学习用户指南:数据集加载实用程序(http://scikit-learn.org/stable/datasets/index.html)

scikit-learn API:sklearn - 数据集(http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets)

总结

在本教程中,您发现了测试问题,以及如何在Python中使用scikit库。

具体来说,你学会了:

如何生成多分类预测问题

如何生成二分类预测问题

如何生成线性回归预测测试问题

目标检测必须要OpenCV?10行Python代码也能实现,亲测好用! 流量视频课程

img

蔺班

关注

大数据文摘出品

编译:朱一辉、雪清、小鱼

短短10行代码就可以实现目标检测?!

本文作者和他的团队构建了一个名为ImageAI 的Python库,集成了现今流行的深度学习框架和计算机视觉库。本文将手把手教你构建自己的第一个目标检测应用,而且文摘菌已经帮你踩过坑了,亲测有效!

无人超市、人脸识别、无人驾驶,众多的使用场景及案例,使得【目标检测】正成为计算机视觉最有前景的方向。

听起来似乎是个很难实现的技术,需要大量训练数据和算法才能完成。事实上,本文作者开发了一个基于Python的函数库,可以用十行代码高效实现目标检测。

还不熟悉的读者,我们先来看看,目标检测到底是什么,以及软件开发人员面临的挑战。

目标检测是借助于计算机和软件系统在图像/场景中,定位目标并识别出每个目标的类别的技术。目前已广泛用于人脸检测、车辆检测、行人计数、网络图像、安全系统和无人驾驶汽车等领域。随着计算机技术不断发展和软件开发人员的不懈努力,未来目标检测技术将更广泛的普及开来。

在应用程序和系统中使用先进的目标检测方法,以及基于这些方法构建新的应用程序并不容易。早期目标检测是基于经典算法而实现的,如 OpenCV(广受欢迎的计算机视觉库)所支持的一些算法。然而,这些经典算法的性能会因条件而受到限制。

2012年,深度学习领域取得众多突破,学者们提出了一系列全新、高精度的目标检测算法和方法,比如R-CNN, Fast-RCNN, Faster-RCNN, RetinaNet,以及既快又准的SSD和YOLO等。要使用这些基于深度学习的方法和算法(当然深度学习也是基于机器学习),需要对数学和深度学习框架有很深的理解。数百万的软件开发人员致力于整合目标检测技术进行新产品的开发。但是想要理解这项技术并加以使用,对非深度学习领域的程序员来说并不容易。

一位自学了计算机的开发者Moses Olafenwa在几个月前意识到了这个问题,并与同伴一起开发了一个名叫ImageAI的Python函数库。

ImageAI可以让程序员和软件开发者只用几行代码,就能轻易地把最先进的计算机视觉技术整合到他们现有的以及新的应用程序里面。

用ImageAI实现目标检测,你只需要以下步骤:

1. 安装Python

2. 安装ImageAI和相关函数库

3. 下载目标检测模型文件

4. 运行示例代码(只有10行)

准备工作

文摘菌测试环境为Windows 64位系统,Python版本为3.6。关注大数据文摘微信公众号,在后台回复“检测”可获取代码和模型文件~

1) 从Python官网下载并安装Python 3,并安装pip。

下载地址:

https://python.org

https://pip.pypa.io/en/stable/installing/

2)用pip安装下列依赖

找到Pyhthon安装目录下的Scripts文件夹,如C:\XXX \Python\Python36\Scripts,打开cmd命令窗口,依次输入下列安装命令即可。

1. Tensorflow:

pip install tensorflow

2.Numpy:

pip install numpy

3.SciPy

pip install scipy

4.OpenCV

pip install opencv-python

5.Pillow

pip install pillow

6.Matplotlib

pip install matplotlib

7. H5py

pip install h5py

8. Keras

pip install keras

9. ImageAI

pip install https://github/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl

注:在安装ImageAI时如果出现异常,可先下载.whl文件,并放在Scripts文件夹下,用下列命令进行安装:

pip install imageai-2.0.1-py3-none-any.whl

3) 下载用于目标检测的RetinaNet模型文件:

下载地址:

https://github/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

准备工作到此结束,你可以写自己的第一个目标检测代码了。新建一个Python文件并命名(如FirstDetection.py),然后将下述代码写入此文件。接着将RetinaNet模型文件、FirstDetection.py和你想检测的图片放在同一路径下,并将图片命名为“image.jpg”。

下面是FirstDetection.py中的10行代码:

from imageai.Detection import ObjectDetectionimport osexecution_path = os.getcwd()detector = ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))for eachObject in detections:print(eachObject["name"] + " : " + eachObject["percentage_probability"] )

然后,双击FirstDetection.py运行代码,并稍等片刻,识别结果就会在控制台打印出来。一旦结果在控制台输出,在包含FirstDetection.py的文件夹里,你会发现一张新保存的图片,文件名为“imagenew.jpg”。

注:如果运行代码时出现下列异常:

则需要安装Numpy+MKL依赖,下载对应的.whl文件并放在Scripts文件夹下,用pip安装.whl文件即可。

下载地址:

https://lfd.uci.edu/~gohlke/pythonlibs/#numpy

检测结果

来看看下面这2张示例图片以及经过检测后保存的新图片。

检测前:

检测后:

检测结果:

person : 55.8402955532074

person : 53.21805477142334

person : 69.25139427185059

person : 76.41745209693909

bicycle : 80.30363917350769

person : 83.58567953109741

person : 89.06581997871399

truck : 63.10953497886658

person : 69.82483863830566

person : 77.11606621742249

bus : 98.00949096679688

truck : 84.02870297431946

car : 71.98476791381836

检测结果:

person : 71.10445499420166

person : 59.28672552108765

person : 59.61582064628601

person : 75.86382627487183

motorcycle : 60.1050078868866

bus : 99.39600229263306

car : 74.05484318733215

person : 67.31776595115662

person : 63.53200078010559

person : 78.2265305519104

person : 62.880998849868774

person : 72.93365597724915

person : 60.01397967338562

person : 81.05944991111755

motorcycle : 50.591760873794556

motorcycle : 58.719027042388916

person : 71.69321775436401

bicycle : 91.86570048332214

motorcycle : 85.38855314254761

文摘菌测试了另外几张图片,结果如下:

检测前:

检测后:

检测结果:

car : 59.04694199562073

car : 50.62631368637085

car : 71.59191966056824

car : 52.60368585586548

person : 76.51243805885315

car : 56.73831105232239

car : 50.02853870391846

car : 94.18612122535706

car : 70.23521065711975

car : 75.06842017173767

car : 87.21032738685608

car : 89.46954607963562

person : 73.89532923698425

bicycle : 90.31689763069153

bus : 65.3587281703949

竟然可以检测出牛……

检测结果:

person : 55.15214800834656

person : 62.79672980308533

person : 69.01599168777466

person : 67.26776957511902

person : 75.51649808883667

person : 52.9820442199707

person : 67.23594665527344

person : 69.77047920227051

person : 83.80664587020874

person : 61.785924434661865

person : 82.354336977005

person : 93.08169484138489

cow : 84.69656705856323

检测结果:

person : 65.07909297943115

person : 65.68368077278137

person : 68.6377465724945

person : 83.80006551742554

person : 85.69389581680298

person : 55.40691018104553

person : 56.62997364997864

person : 58.07020664215088

person : 70.90385556221008

person : 95.06895542144775

代码解释

下面我们来解释一下这10行代码的含义。

from imageai.Detection import ObjectDetectionimport osexecution_path = os.getcwd()

上面3行代码中,第一行导入ImageAI的目标检测类,第二行导入Python的os类,第三行定义一个变量,用来保存Python文件、RetianNet模型文件和图片所在文件夹的路径。

detector = ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

上面5行代码中,第一行定义目标检测类,第二行将模型类型设置为RetinaNet,第三行将模型的路径设为RetinaNet模型文件所在路径,第四行将模型载入目标检测类,然后第五行调用检测函数,并解析输入图片和输出图片的路径。

for eachObject in detections:print(eachObject["name"] + " : " + eachObject["percentage_probability"] )

上面2行代码中,第一行迭代所有detector.detectObjectsFromImage函数返回的结果,然后,第二行打印出模型检测出的图片中每个目标的类型和概率。

ImageAI还支持配置目标检测过程中的其他功能。例如,将检测到的每个目标的图片单独提取出来。通过简单地把extract_detected_objects=True写入detectObjectsFromImage函数,目标检测类就会为图片对象集新建一个文件夹,然后提取出每个图片,将它们存入这个文件夹,并返回一个数组用来保存每个图片的路径,如下所示:

detections, extracted_images = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True)

我们用第一个示例图片提取出来的检测结果如图所示:

参数配置

为了满足目标检测的生产需求,ImageAI提供了一些可配置的参数,包括:

Adjusting Minimum Probability(可调整最小概率阈值)

默认阈值为50%,如果检测结果的概率值低于50%,则不显示检测结果。你可以根据具体需求对该阈值进行修改。

Custom Objects Detection(自定义目标检测)

使用提供的CustomObject类,你可以让检测结果只显示特定类型的目标。

Detection Speeds(检测速度)

可以将检测速度设置为“fast”、“ faster”和“fastest”,以减少检测图片所需的时间。

Input Types(输入类型)

你可以解析并修改图像的文件路径,其中,Numpy数组,或是图片文件流都可以作为输入类型。

Output Types(输出类型)

你可以修改detectObjectsFromImage 函数的返回结果,例如返回图片文件或Numpy数组。

详细的说明文档在GitHub上,GitHub链接:

https://github/OlafenwaMoses/ImageAI

关注大数据文摘微信公众号,在后台回复“检测”可获取代码和模型文件~

动手试试吧,欢迎在留言区分享~

Python功能不够多?来看看如何生成测试数据集吧! 推广视频课程

img

吉梦琪

关注

测试数据集是小型的专用数据集,它可以让你测试一个机器学习算法或测试工具。数据集中的数据有完整的定义(例如线性或非线性)使你可以探索特定的算法行为。scikit-learn Python 库提供一套函数,用于从可配置测试问题中生成样本来进行回归和分类

在本教程中,你将学习测试问题及如何在 Python 中使用 scikit-learn 进行测试。

完成本教程后,你将知道:

如何生成多类分类预测测试问题如何生成二进制分类预测测试问题如何生成线性回归预测测试问题

让我们开始吧。

教程概述

本教程被分成了 3 个部分,他们分别是:

1. 测试数据集

2. 分类测试问题

3. 回归测试问题

测试数据集

开发和实现机器学习算法时的一个问题是如何知道你是否已经正确实现了他们——它们似乎在有 bug 时也能工作。

测试数据集是小型设计问题,它能让你测试、调试算法和测试工具。它们对于更好地理解算法响应超参数变化的行为方面也很有用。

下面是测试数据集的一些理想特性:

它们可以快速、容易地生成。它们包含「已知」或「理解」的结果来和预测进行比较。它们是随机的,每次生成时都允许在同一个问题上随机变化。它们很小、容易在而二维中实现可视化。它们可以被增大。

我建议在开始一个新的机器学习算法或开发一个新的测试工具时使用测试数据集。scikit-learn 是一个用于机器学习的 Python 库,它提供了生成一组测试问题的函数。

在本教程中,我们将看一些为分类和回归算法生成测试问题的例子。

分类测试问题

分类是将标签分配给数据的问题。在本节中,我们将看三个分类问题:blobs、moons 和 circles。

Blobs 分类问题

make_blobs() 函数可被用于生成具有高斯分布的 blobs 点。你可以控制生成 blobs 的数量,生成样本的数量以及一系列其他属性。考虑到 blobs 的线性可分性质,该问题也适用于线性分类问题。

下面的例子是一个多类分类预测问题,它生成了一个具有三个 blobs 的 2D 样本数据集。每个数据有两个输入和 0、1 或 2 个类的值。

# generate 2d classification dataset

X, y = make_blobs(n_samples=100, centers=3, n_features=2)

完整的例子如下所示。

from sklearn.datasets.samples_generator import make_blobs

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_blobs(n_samples=100, centers=3, n_features=2)

# scatter plot, dots colored by class value

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue', 2:'green'}

fig, ax = pyplot.subplots()

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

运行该示例将生成该问题的输入和输出,然后创建一个方便的 2D 图,用不同的颜色显示不同类的点。注意,考虑到问题生成器的随机特性,你的特定数据集和结果图会有所不同。这是一个特点,而不是一个错误。

Blobs 测试分类问题的散点图

我们将会在下面的例子中使用相同的示例结构。

Moons 分类问题

make_moons() 函数用于二进制分类并且将生成一个漩涡模式,或者两个 moons。你可以控制 moon 形状中的噪声量,以及要生产的样本数量。

这个测试问题适用于能够学习非线性类边界的算法。下面的例子生成了一个中等噪音的 moon 数据集

# generate 2d classification dataset

X, y = make_moons(n_samples=100, noise=0.1)

完整的例子如下所示。

from sklearn.datasets import make_moons

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_moons(n_samples=100, noise=0.1)

# scatter plot, dots colored by class value

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue'}

fig, ax = pyplot.subplots()

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

运行该示例会生成并绘制数据集以供查阅,然后再按照指定的类对样本着色。

Moons 测试分类问题的散点图

Circles 分类问题

make_circles() 函数生成一个数据集落入同心圆的二进制分类问题。再一次地,与 moons 测试问题一样,你可以控制形状中的噪声量。该测试问题适用于可以学习复杂的非线性流行的算法。下面的例子中生成了一个具有一定噪音的 circles 数据集

# generate 2d classification dataset

X, y = make_circles(n_samples=100, noise=0.05)

完整例子如下所示。

from sklearn.datasets import make_circles

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_circles(n_samples=100, noise=0.05)

# scatter plot, dots colored by class value

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue'}

fig, ax = pyplot.subplots()

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

运行该示例并绘制数据集以供查阅。

Circles 测试分类问题的散点图

回归测试问题

回归是根据观察数据预测数量的问题。make_regression() 函数将创建一个输入和输出具有线性关系的数据集。你可以配置样本数量,输入特征数量,噪声级别等等。该数据集适用于可以学习线性回归函数的算法。

下面的例子将生成 100 个示例,他们具有适度的噪声,都有一个输入特征和一个输出特征。

# generate regression dataset

X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

完整例子如下所示。

from sklearn.datasets import make_regression

from matplotlib import pyplot

# generate regression dataset

X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

# plot regression dataset

pyplot.scatter(X,y)

pyplot.show()

运行该示例将生成数据并绘制 x 和 y 的关系,考虑到它是线性的,所以结果是很简单的。

回归测试问题的散点图

扩展

本节列出了一些你可能想要探讨的扩展该教程的想法。

比较算法。选择一个测试问题,并比较该问题的一系列算法并汇报性能。放大问题。选择一个测试问题并探索将其放大,用级数法来可视化结果,也可以探索一个特定算法模型技能和问题规模。其他问题。库提供了一套其他测试问题;为每个问题编写了一个代码示例来展示它们是如何工作的。

拓展阅读

如果你想要更深入的了解,本节提供了关于该课题更多的资源。

scikit-learn 用户指南: Dataset loading utilities (http://scikit-learn.org/stable/datasets/index.html)scikit-learn API: sklearn.datasets: Datasets (http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets)

总结

在本教程中,我们学习了测试问题及如何用 scikit-learn 在 Python 中使用他们。

具体来说,其中包括:

如何生成多类分类预测测试问题;如何生成二进制分类预测测试问题;如何生成线性回归预测测试问题。

Python自定义HtmlTestRunner测试报告 营销视频课程

img

Huasco

关注

简述

使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告,Python我们使用的HTMLtestrunner 进行生成,但是默认提供的生成报告内容,并不能满足我们的需求,怎么才能让测试报告数据更清晰,内容更丰富呢。对于一些人来说,可能已经重写了报告生成方式,放弃使用HTMLtestrunner。但是对于python小白可能还做不到,只能用现有东西进行展示,那么下面简单介绍通过修改HTMLtestrunner去实现想要的内容。

先通过两张图片对比一下我们将要实现的功能:

图表 1

图表 2

如图所示,图表1是原始样式输出,图表2是修改后样式输出。通过对比我们可以看到,图表2比图表1多了首位部的两列。我在第一行加caseid,用来记录用例的编号,最后一列,添加了每一个用例执行过程中关键步骤的截图快照。

这样做的好处:

有了用例编号我们可以通过用例ID进行对用例的定位,尤其是对失败用例的定位。有了用例执行过程中关键位置截图快照,对于失败或者出错异常的用例,在无人值守情况下进行执行用例时,可以进行界面追踪。实现

下面来介绍怎么实现的,首先先说一下我实现的思路。对于这个我们的测试报告而言,我只想调整一下他的展示样式,丰富两列内容。所以先去想怎么去把他的样式给修改了。然后再往修改后的样式表格里面添加数据。

也就是分两步做:

1改样式

2加数据

改样式

改样式,这里只需要会基础的HTML

中行、列标识就可以了。

我们要在界面中加两列,那么很简单,就是加两个

就可以了。

看源码部分:

从395行左右开始就是存储HTML代码展示的部分,找到table标签和第一行列头展示内容。

脚本片段1:

REPORT_TMPL = “”” …… “”” 代码段里面包含了

的结构内容

如:

Test Group/Test case%(test_list)s Total
CountPassFailErrorViewScreenshot
%(count)s%(Pass)s%(fail)s%(error)s  

table标签中的第一个就是第一行,中的每一个代表一列。标签中间的文本是直接显示在界面的。

//这里添加colspan='2' 是合并2个列。 //因为下面的行中的caseid需要占一列, //但是标题列头部分显示是一个整体,所以做了合并 Test Group/Test caseCountPassFailErrorViewScreenshot //图片快照的列头标题脚本片段2:

REPORT_CLASS_TMPL = “”” … “””代码段 是 展示calss的行,可以叫做测试模块的类,它是单独放在一行中的,每个模块一行。因为要跟上面的第一行标题中的列数对应,所以修改如下:

//添加的caseid 的标题,这一行不在主列头, //而是放在测试模块用例统计所在的行里面。 case_id%(desc)s%(count)s%(Pass)s%(fail)s%(error)sDetail  //保持列数统一,加入空白列脚本片段3:

REPORT_TEST_WITH_OUTPUT_TMPL = “”” … “”” 是测试用例展示部分代码,这段内容是展开测试模块后进行显示的

REPORT_TEST_WITH_OUTPUT_TMPL = r""" // %(caseid)s 是python转译html代码中变量替换方式。// caseid 会在python脚本中定义。 %(caseid)s%(desc)s

%(status)s [x]

%(script)s

//这一列内容加入图片快照的链接访问路径 %(image)s 中替换链接地址 //链接图标

单从HTML界面样式展示来看,上面所有代码段中修改都是在每个加入两个。

这样我们的样式就改完了。然后开始加入数据。

加数据

先想一下我们要加什么数据.从样式中看我们增加了两个列,那么有两列的数据是需要增加的,具体加什么呢?想一下?我们在改样式的时候加的两个列中使用到了变量,那么变量取值是需要实现的。那么首先定义变量。

定义报告输出两个变量的取值,放在 REPORT_TEST_OUTPUT_TMPL定义的下面:

脚本片段4:

REPORT_TEST_OUTPUT_TMPL = r"""%(id)s: %(output)s"""REPORT_TEST_OUTPUT_IMAGE = r"""%(screenshot)s"""REPORT_TEST_OUTPUT_CASEID = r"""%(case_id)s"""

然后找到 _generate_report_test 函数,在这个函数中定义我们要替换html变量,并实现变量的取值。

脚本片段5:

script = self.REPORT_TEST_OUTPUT_TMPL % dict( id = tid, output = saxutils.escape(uo+ue), ) image = self.REPORT_TEST_OUTPUT_IMAGE % dict( screenshot = saxutils.escape(uo+ue)) caseid = self.REPORT_TEST_OUTPUT_CASEID % dict( case_id = saxutils.escape(uo+ue) ) row = tmpl % dict( tid = tid, Class = (n == 0 and'hiddenRow'or'none'), style = n == 2 and'errorCase'or (n == 1 and'failCase'or'none'), desc = desc, script = script, image = image[image.find("image"):(int(image.find("png"))+3)], caseid = caseid[caseid.find("case"):(int(caseid.find("case"))+9)], status = self.STATUS[n],)

上面 image 、caseid 字符串截取位置跟我在控制台输出的内容有关系,所以不是通用的,需要自行修改。字符串截取的方式就不讲了,方式很多种找自己合适的熟悉的就行。

至此修改HTMLtestrunner生成报告模板就修改结束,我的这个方式或许不是你想要的,不是你想展示的,希望能在思路上帮你去解决你的问题。

另:有朋友问能不能内容显示成中文的,看明白了上面内容我想中文的显示就不是什么问题了。直接改HTML标签中显示的英文内容翻译为中文就可以了。

作者: Ray博客地址:声明:本文已获作者授权转载,著作权归作者所有。

Python下面那些相见恨晚的自动化测试库 流量视频课程

img

忧深

关注

我们在日常工作中所有用于解决频繁、重复操作的脚本、批处理、

测试框架

unittest – (Python 标准库) 单元测试框架:

Unittest原名是PyUnit、是由java的JUnit衍生而来、对于单元测试、需要预先设置条件、然后对比预期结果和实际测试结果。

unittest库:提供了test cases, test suites, test fixtures,test runner:

test case :通过继承TestCase类,我们可以创建一个test,或者一组tests

test suites : 测试套件

test fixtures : setup + test case + teardown结构

test runner

pytest- 一个成熟的全功能 Python 测试工具:

与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它具有如下特点:

非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

能够支持简单的单元测试和复杂的功能测试

支持参数化

执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败

支持重复执行失败的case

支持运行由nose, unittest编写的测试case

具有很多第三方插件,并且可以自定义扩展

方便的和持续集成工具集成

Robot Framework – 一个通用的自动化测试框架。

Robot Framework是一款python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。主要用于轮次很多的验收测试和验收测试驱动开发

测试用例使用文本文件(TXT或者TSV文件)保存,使用制表符分隔数据。可以方便的使用任何文本编辑器,或者EXCEL编辑测试用例。也可以使用HTML格式创建用例。

测试用例中支持变量使用,可以使用IF语句和FOR循环语句。

可以利用“标签”功能对测试用例进行分类和有选择执行。

支持关键字驱动、数据驱动和行为驱动。

利用已有的关键字,测试人员可以创建自己需要的关键字,形成更高级别的行为。

测试执行报告和日志是HTML格式,容易阅读。

PyAutoGUI – PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块;

PyAutoGUI是用Python写的一个模块,使用它可以控制鼠标和键盘。利用它可以实现自动化任务,只要你人工能操作的都可以用PyAutoGui来完成自动化。

PyAutoGUI

可以模拟鼠标的移动、点击、拖拽

可以键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住

可以识别图片、通过图片来识别GUI上的按钮位置并做出相应的操作

Selenium – Selenium WebDriver 的 Python 绑定;

是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。

使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。

使用简单,可使用Java,Python等多种语言编写用例脚本。

Python——一个简单的自动化测试框架 推广视频课程

img

卫广山

关注

这是柠檬班的第171篇文章

最近办公室的开发哥哥,每天都嚣张的很,说让我弄死他。于是我本着善良助人的天性,来学习接口自动化,并准备在他快下班的时候,给他多提几十个bug。嗯,就是这样,对的,没错

开始接口自动化首先,我们要选择一门语言,测试人员的标配,当然是Python3,不要问为什么,简单粗暴,上手快没有基础的同学可以先去学习一下python基础。首推菜鸟教程和廖雪峰接下来我们看一下我们的接口自动化框架的主要构成。嘿嘿嘿

接口自动化框架一共分为6个模块common:公共模块,包括配置和共用的代码source:接口封装的类test_case:存放单元测试用例test_data:存放测试数据(这里用的是Excel)test_report:存放测试报告的地址test_result:存放测试结果的地址

公共类首先开始编写我们的公共类

HTTP类这里封装了2个函数,一个get请求,一个post请求,并以data形式返回测试结果

读取配置文件的类其实就是为了把什么固定的ip地址,端口,数据库连接信息啦放在配置文件里面,并通过类读取调用,实现数据分离,更加灵活

读取Excel的类将测试数据放在Excel中,通过Excel进行数据管理,如下图

存放测试数据然后通过Excel类读取调用,这些就实现了Excel管理测试用例,然后想测什么接口,就直接在Excel里面加就行。想想都爽,成功的走向了,弄死同事的第一步。

这是我们的核心代码

将测试结果写入Excel,并生成HTML测试报告发送到邮箱,这样,我们就可以坐在靠椅上,喝着咖啡,看着代码,然后等着邮件,最后再提上一大堆bug,嗯,大概生活就是如此的美好

最后让我们来执行我们的main函数对,没错,真相只有一个。见证奇迹的时候到了,然后就会生成我们想要的测试报告和测试结果

主函数入口

执行main的日志测试报告呐,一个崭新的测试报告就这么出来了,惊不惊喜,意不意外。就这样我们一起走向弄死同事的不归路。(ps:其实我们还是很相亲相爱的,当然,是他死我活)

测试报告下次有时间会再聊上五毛钱的基于Jenkins持续集成自动化的实践,当然这都是自己瞎捣鼓的,有大神的,请留言,一起共同进步。

Python功能不够多?来看看如何生成测试数据集吧! 行业视频课程

img

你走呀

关注

测试数据集是小型的专用数据集,它可以让你测试一个机器学习算法或测试工具。数据集中的数据有完整的定义(例如线性或非线性)使你可以探索特定的算法行为。scikit-learn Python 库提供一套函数,用于从可配置测试问题中生成样本来进行回归和分类

在本教程中,你将学习测试问题及如何在 Python 中使用 scikit-learn 进行测试。

完成本教程后,你将知道:

如何生成多类分类预测测试问题如何生成二进制分类预测测试问题如何生成线性回归预测测试问题

让我们开始吧。

教程概述

本教程被分成了 3 个部分,他们分别是:

1. 测试数据集

2. 分类测试问题

3. 回归测试问题

测试数据集

开发和实现机器学习算法时的一个问题是如何知道你是否已经正确实现了他们——它们似乎在有 bug 时也能工作。

测试数据集是小型设计问题,它能让你测试、调试算法和测试工具。它们对于更好地理解算法响应超参数变化的行为方面也很有用。

下面是测试数据集的一些理想特性:

它们可以快速、容易地生成。它们包含「已知」或「理解」的结果来和预测进行比较。它们是随机的,每次生成时都允许在同一个问题上随机变化。它们很小、容易在而二维中实现可视化。它们可以被增大。

我建议在开始一个新的机器学习算法或开发一个新的测试工具时使用测试数据集。scikit-learn 是一个用于机器学习的 Python 库,它提供了生成一组测试问题的函数。

在本教程中,我们将看一些为分类和回归算法生成测试问题的例子。

分类测试问题

分类是将标签分配给数据的问题。在本节中,我们将看三个分类问题:blobs、moons 和 circles。

Blobs 分类问题

make_blobs() 函数可被用于生成具有高斯分布的 blobs 点。你可以控制生成 blobs 的数量,生成样本的数量以及一系列其他属性。考虑到 blobs 的线性可分性质,该问题也适用于线性分类问题。

下面的例子是一个多类分类预测问题,它生成了一个具有三个 blobs 的 2D 样本数据集。每个数据有两个输入和 0、1 或 2 个类的值。

# generate 2d classification dataset

X, y = make_blobs(n_samples=100, centers=3, n_features=2)

完整的例子如下所示。

from sklearn.datasets.samples_generator import make_blobs

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_blobs(n_samples=100, centers=3, n_features=2)

# scatter plot, dots colored by class value

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue', 2:'green'}

fig, ax = pyplot.subplots()

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

运行该示例将生成该问题的输入和输出,然后创建一个方便的 2D 图,用不同的颜色显示不同类的点。注意,考虑到问题生成器的随机特性,你的特定数据集和结果图会有所不同。这是一个特点,而不是一个错误。

Blobs 测试分类问题的散点图

我们将会在下面的例子中使用相同的示例结构。

Moons 分类问题

make_moons() 函数用于二进制分类并且将生成一个漩涡模式,或者两个 moons。你可以控制 moon 形状中的噪声量,以及要生产的样本数量。

这个测试问题适用于能够学习非线性类边界的算法。下面的例子生成了一个中等噪音的 moon 数据集

# generate 2d classification dataset

X, y = make_moons(n_samples=100, noise=0.1)

完整的例子如下所示。

from sklearn.datasets import make_moons

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_moons(n_samples=100, noise=0.1)

# scatter plot, dots colored by class value

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue'}

fig, ax = pyplot.subplots()

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

运行该示例会生成并绘制数据集以供查阅,然后再按照指定的类对样本着色。

Moons 测试分类问题的散点图

Circles 分类问题

make_circles() 函数生成一个数据集落入同心圆的二进制分类问题。再一次地,与 moons 测试问题一样,你可以控制形状中的噪声量。该测试问题适用于可以学习复杂的非线性流行的算法。下面的例子中生成了一个具有一定噪音的 circles 数据集

# generate 2d classification dataset

X, y = make_circles(n_samples=100, noise=0.05)

完整例子如下所示。

from sklearn.datasets import make_circles

from matplotlib import pyplot

from pandas import DataFrame

# generate 2d classification dataset

X, y = make_circles(n_samples=100, noise=0.05)

# scatter plot, dots colored by class value

df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

colors = {0:'red', 1:'blue'}

fig, ax = pyplot.subplots()

grouped = df.groupby('label')

for key, group in grouped:

group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

pyplot.show()

运行该示例并绘制数据集以供查阅。

Circles 测试分类问题的散点图

回归测试问题

回归是根据观察数据预测数量的问题。make_regression() 函数将创建一个输入和输出具有线性关系的数据集。你可以配置样本数量,输入特征数量,噪声级别等等。该数据集适用于可以学习线性回归函数的算法。

下面的例子将生成 100 个示例,他们具有适度的噪声,都有一个输入特征和一个输出特征。

# generate regression dataset

X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

完整例子如下所示。

from sklearn.datasets import make_regression

from matplotlib import pyplot

# generate regression dataset

X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

# plot regression dataset

pyplot.scatter(X,y)

pyplot.show()

运行该示例将生成数据并绘制 x 和 y 的关系,考虑到它是线性的,所以结果是很简单的。

回归测试问题的散点图

扩展

本节列出了一些你可能想要探讨的扩展该教程的想法。

比较算法。选择一个测试问题,并比较该问题的一系列算法并汇报性能。放大问题。选择一个测试问题并探索将其放大,用级数法来可视化结果,也可以探索一个特定算法模型技能和问题规模。其他问题。库提供了一套其他测试问题;为每个问题编写了一个代码示例来展示它们是如何工作的。

拓展阅读

如果你想要更深入的了解,本节提供了关于该课题更多的资源。

scikit-learn 用户指南: Dataset loading utilities (http://scikit-learn.org/stable/datasets/index.html)scikit-learn API: sklearn.datasets: Datasets (http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets)

总结

在本教程中,我们学习了测试问题及如何用 scikit-learn 在 Python 中使用他们。

具体来说,其中包括:

如何生成多类分类预测测试问题;如何生成二进制分类预测测试问题;如何生成线性回归预测测试问题。

Python自定义HtmlTestRunner测试报告 营销视频课程

img

泣幽鬼

关注

简述

使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告,Python我们使用的HTMLtestrunner 进行生成,但是默认提供的生成报告内容,并不能满足我们的需求,怎么才能让测试报告数据更清晰,内容更丰富呢。对于一些人来说,可能已经重写了报告生成方式,放弃使用HTMLtestrunner。但是对于python小白可能还做不到,只能用现有东西进行展示,那么下面简单介绍通过修改HTMLtestrunner去实现想要的内容。

先通过两张图片对比一下我们将要实现的功能:

图表 1

图表 2

如图所示,图表1是原始样式输出,图表2是修改后样式输出。通过对比我们可以看到,图表2比图表1多了首位部的两列。我在第一行加caseid,用来记录用例的编号,最后一列,添加了每一个用例执行过程中关键步骤的截图快照。

这样做的好处:

有了用例编号我们可以通过用例ID进行对用例的定位,尤其是对失败用例的定位。有了用例执行过程中关键位置截图快照,对于失败或者出错异常的用例,在无人值守情况下进行执行用例时,可以进行界面追踪。实现

下面来介绍怎么实现的,首先先说一下我实现的思路。对于这个我们的测试报告而言,我只想调整一下他的展示样式,丰富两列内容。所以先去想怎么去把他的样式给修改了。然后再往修改后的样式表格里面添加数据。

也就是分两步做:

1改样式

2加数据

改样式

改样式,这里只需要会基础的HTML

中行、列标识就可以了。

我们要在界面中加两列,那么很简单,就是加两个

就可以了。

看源码部分:

从395行左右开始就是存储HTML代码展示的部分,找到table标签和第一行列头展示内容。

脚本片段1:

REPORT_TMPL = “”” …… “”” 代码段里面包含了

的结构内容

如:

Test Group/Test case%(test_list)s Total
CountPassFailErrorViewScreenshot
%(count)s%(Pass)s%(fail)s%(error)s  

table标签中的第一个就是第一行,中的每一个代表一列。标签中间的文本是直接显示在界面的。

//这里添加colspan='2' 是合并2个列。 //因为下面的行中的caseid需要占一列, //但是标题列头部分显示是一个整体,所以做了合并 Test Group/Test caseCountPassFailErrorViewScreenshot //图片快照的列头标题脚本片段2:

REPORT_CLASS_TMPL = “”” … “””代码段 是 展示calss的行,可以叫做测试模块的类,它是单独放在一行中的,每个模块一行。因为要跟上面的第一行标题中的列数对应,所以修改如下:

//添加的caseid 的标题,这一行不在主列头, //而是放在测试模块用例统计所在的行里面。 case_id%(desc)s%(count)s%(Pass)s%(fail)s%(error)sDetail  //保持列数统一,加入空白列脚本片段3:

REPORT_TEST_WITH_OUTPUT_TMPL = “”” … “”” 是测试用例展示部分代码,这段内容是展开测试模块后进行显示的

REPORT_TEST_WITH_OUTPUT_TMPL = r""" // %(caseid)s 是python转译html代码中变量替换方式。// caseid 会在python脚本中定义。 %(caseid)s%(desc)s

%(status)s [x]

%(script)s

//这一列内容加入图片快照的链接访问路径 %(image)s 中替换链接地址 //链接图标

单从HTML界面样式展示来看,上面所有代码段中修改都是在每个加入两个。

这样我们的样式就改完了。然后开始加入数据。

加数据

先想一下我们要加什么数据.从样式中看我们增加了两个列,那么有两列的数据是需要增加的,具体加什么呢?想一下?我们在改样式的时候加的两个列中使用到了变量,那么变量取值是需要实现的。那么首先定义变量。

定义报告输出两个变量的取值,放在 REPORT_TEST_OUTPUT_TMPL定义的下面:

脚本片段4:

REPORT_TEST_OUTPUT_TMPL = r"""%(id)s: %(output)s"""REPORT_TEST_OUTPUT_IMAGE = r"""%(screenshot)s"""REPORT_TEST_OUTPUT_CASEID = r"""%(case_id)s"""

然后找到 _generate_report_test 函数,在这个函数中定义我们要替换html变量,并实现变量的取值。

脚本片段5:

script = self.REPORT_TEST_OUTPUT_TMPL % dict( id = tid, output = saxutils.escape(uo+ue), ) image = self.REPORT_TEST_OUTPUT_IMAGE % dict( screenshot = saxutils.escape(uo+ue)) caseid = self.REPORT_TEST_OUTPUT_CASEID % dict( case_id = saxutils.escape(uo+ue) ) row = tmpl % dict( tid = tid, Class = (n == 0 and'hiddenRow'or'none'), style = n == 2 and'errorCase'or (n == 1 and'failCase'or'none'), desc = desc, script = script, image = image[image.find("image"):(int(image.find("png"))+3)], caseid = caseid[caseid.find("case"):(int(caseid.find("case"))+9)], status = self.STATUS[n],)

上面 image 、caseid 字符串截取位置跟我在控制台输出的内容有关系,所以不是通用的,需要自行修改。字符串截取的方式就不讲了,方式很多种找自己合适的熟悉的就行。

至此修改HTMLtestrunner生成报告模板就修改结束,我的这个方式或许不是你想要的,不是你想展示的,希望能在思路上帮你去解决你的问题。

另:有朋友问能不能内容显示成中文的,看明白了上面内容我想中文的显示就不是什么问题了。直接改HTML标签中显示的英文内容翻译为中文就可以了。

作者: Ray博客地址:声明:本文已获作者授权转载,著作权归作者所有。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP