文档章节

生成比较美观的appium自动化测试报告,并且包含测试截图

kylekaka
 kylekaka
发布于 2017/02/21 08:47
字数 1047
阅读 767
收藏 0

最近工作中想要做自动化回归测试,想法是将每个测试用例都做自动截图,然后将最近的稳定版本和当前测试的版本的两张截图去对比,也要将两个版本的截图都放到测试报告中方便人工来进行验证。最初想法是通过HTMLTestRunner生成带截图的测试报告,但是HTMLTestRunner本身没有截图功能,还有它不支持python 3,所以另外找了其他的工具来做这件事。

生成测试报告工具简介

HtmlTestRunner是将单元测试的结果保存为html格式的测试报告的工具,这个工具的功能和HTMLTestRunner很想,而且名称也很像。但是它支持python3,而且生成的报告的样式更加美观。

安装HtmlTestRunner

访问这个url: https://pypi.python.org/pypi/html-testRunner/1.0.3 然后下载html_testRunner-1.0.3-py2.py3-none-any.whl文件,接下来通过下面命令(适用于ubuntu等linux系统)来安装:

$ sudo pip3 install html_testRunner-1.0.3-py2.py3-none-any.whl

如果你是windows系统,尝试使用下面命令安装:

$ pip install html_testRunner-1.0.3-py2.py3-none-any.whl

添加截图功能

HtmlTestRunner这个工具,本身没有展示截图的功能,不过可以通过修改它的template文件来添加截图功能。 通过下面地址,下载HtmlTestRunner的源代码到本地:

https://github.com/oldani/HtmlTestRunner

用编辑器打开HtmlTestRunner/template/report_template.html文件,进行修改: 输入图片说明

需要删除上图中标红色的代码,并新增绿色的代码。注意将新增图片的目录设置为自己本地的截图保存的目录。

生成自动化测试报告

使用python的appium API和unittest单元测试框架,再加上上面提到的HtmlTestRunner第三方模块,可以生成带测试截图的测试报告。具体代码如下:

#!/usr/bin/env python3
# coding=utf-8
from appium import webdriver
from nose.tools import *
import unittest
import HtmlTestRunner #生成HTML格式的测试报告

class take_screen_shot():  #这个类将在下面作为装饰器使用
    def __init__(self, func):
        self.func = func
        self.name = func.__name__ + ' (__main__.CalTestCase).png'  #拼接截图文件名

    def __call__(self, *args):   #对每次调用的函数都做截图操作
        try:
            self.func(self, *args)
        finally:
            driver.get_screenshot_as_file(self.name) 

class CalTestCase(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android' #设置操作平台
        desired_caps['platformVersion'] = '5.1.1' #操作系统版本
        desired_caps['deviceName'] = 'Nexus 4' #设备名称
        desired_caps['appPackage'] = 'com.android.calculator2' 
        desired_caps['appActivity'] = '.Calculator'
        desired_caps['udid'] = '04c5a5af52197902' 
        global driver
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        
    @classmethod
    def tearDownClass(self):
        driver.quit() #退出当前应用

    @take_screen_shot    #对每一条测试用例使用装饰器
    def test_case_01(self): 
        text = driver.find_element_by_id('com.android.calculator2:id/formula').text
        assert_equal(text, "") 
    
    @take_screen_shot
    def test_case_02(self):  
        driver.find_element_by_id('com.android.calculator2:id/digit_1').click() #点击数字键1
        driver.find_element_by_id('com.android.calculator2:id/op_add').click() #点击加号
        driver.find_element_by_id('com.android.calculator2:id/digit_1').click() #点击数字键1
        driver.find_element_by_id('com.android.calculator2:id/eq').click() #点击等号
        text = driver.find_element_by_id('com.android.calculator2:id/formula').text
        assert_equal(text, "2") 

if __name__ == '__main__':  #下面语句用来生成测试报告
    unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='cal_report',
                                                           report_title='Android计算器测试报告'))

代码分析:因为计划每个测试用例都进行截图操作,所以使用了python的装饰器。这样就实现了每个测试用例执行之后不管是成功还是失败都进行截图操作,代码的最后使用HtmlTestRunner工具生成测试报告。

接下来使用下面命令执行测试:

$ python3 appium_deom.py
Running tests... 
----------------------------------------------------------------------
 test_case_01 (__main__.CalTestCase) ... OK (1.786675)s
 test_case_02 (__main__.CalTestCase) ... OK (5.081634)s
----------------------------------------------------------------------
Ran 2 tests in 0:00:
OK
Generating HTML reports...

生成的测试报告的位置在测试脚本所在的目录下的reports目录下,通过浏览器查看,结果如下: 输入图片说明

点击view按钮可以展开查看截图和错误信息: 输入图片说明

接下来想要做的

现在的测试报告的html模板中的截图还是写死的路径,如果能将截图的路径也能自动生成的话就更好了。 还有现在没有进行两个版本截图的对比,考虑继续寻找工具做截图的对比,并突出或标记上两张图片不相同的地方。

© 著作权归作者所有

kylekaka
粉丝 4
博文 25
码字总数 20831
作品 0
通州
QA/测试工程师
私信 提问
树先生168/PatatiumAppUi

#PatatiumAppUi 简介 这是一个AppUi自动化测试框架,由webdriver中文社区创办人土豆(本人技术笔名)所创建,该APP自动化测试框架是用java语言编写的,基于selenium webdriver Appium的开源自动...

树先生168
2016/09/04
0
0
App 自动化测试框架--PatatiumAppUi

这是一个AppUi自动化测试框架,由webdriver中文社区创办人土豆(本人技术笔名)所创建。 该APP自动化测试框架是用Java语言编写的,基于selenium webdriver Appium的开源自动化测试框架,该框架...

郑树恒
2016/09/05
1K
0
你懂自动化测试吗?

自动化测试:自动化测试的一个很重要的目的就是提高测试效率,并且快速的反馈质量。但是各个领域的自动化还是有一些区别的,比如:web自动化和移动端自动化。而对于自动化来说,首先还是要去...

白一客
2017/04/14
215
1
Android手机自动化测试工具有哪些?

1、Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁,API更加精确,编写测试代码简单,容易快速上手。因为是基于Instrumentation的,所以不...

白一客
2017/05/16
441
0
8款用于移动应用开发的测试工具

  【IT168 技术】移动设备的快速增长为移动应用开发者和程序员带来了机遇,同时也面临很多测试方面的问题。比如众多的操作系统版本,浏览器和智能设备等,那么如何确保所有组合的质量体验?...

it168网站
2017/04/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
18分钟前
6
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
49分钟前
10
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
50分钟前
8
0
oracle 初始化数据库脚本

create user lpf identified by 123456; create tablespace lpf_ts_cms datafile '/opt/app/oracle/product/11.2.0/lpf.dbf' size 200M; alter user lpf default tablespace lpf_ts_cms; sel......

internetafei
55分钟前
8
0
深入了解Redis底层数据结构

说明 说到Redis的数据结构,我们大概会很快想到Redis的5种常见数据结构:字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted Set),以及他们的特点和运用场景。不过它们是...

TurboSanil
55分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部