Python做软件自动化测试的入门提问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python做软件自动化测试的入门提问相关的知识,希望对你有一定的参考价值。

现在我看到很多书上都写着Python有很多很明显的优点,也比较适合做软件测试。但我一直有一个疑问,怎么来用这种脚本语言做自动化测试?
我举个例子,我用MFC编写了一段程序,功能就是一个登陆界面,如下:(冒用一下QQ的登陆界面表示,但就是这个意思,不要在意细节哈)

那么,我用Python怎么测试我编写的着一段程序呢?给我一个可运行的测试用例。

另外,看网上说的Python测试框架又是什么?看了很多资料还是没有明白,一团乱。

用python做自动化测试,主要是接口测试和UI自动化测试。一、接口测试:http协议的举例:可以用python自带的urllib\urllib2模拟,模拟前端向服务器发送数据,获取返回值后,进行校验和判断来进行接口测试。网上的例子也比较多,这里简单说一下,比如request中data的边界值测试、字符测试、非空为空测试等等,都可以做二、UI自动化测试:html页面(python+selenium)或者一些安卓app(python+appiun)可以用。主要是页面元素的检查、输入等。比如可以写一个脚本,自动登录百度页面,搜索某一个关键字,并且获得此关键字的百度搜索数量。 参考技术A 做自动化首先得选择用什么样的测试工具,python只是用来编写测试脚本用

目前支持python脚本的测试工具也有一些,web测试:selenium,性能测试:LR也支持,功能:QTP目前也支持,但这些工具传统上都是只支持C/C++、VBS的,扩展支持python后效果怎样不是很清楚了。另外,在安卓平台结合MonkeyRunner 测试手机软件效果是很好的。

除此之外,python也可用于C/C++的单元测试。
参考技术B 同在软件测试岗位。由于同样初学python,所以没有太多的实践经验。

使用python的单元测试框架,可以建立测试类,构造测试集。
测试类中包含了common的测试方法定义,包括测试开始前建立测试环境的setUp方法和测试完成后清理还原环境的tearDown方法,最好按照约定规则(以test开头)来命名所有的测试方法。
测试集允许你根据测试策略组合不同的测试用例并实施。

下面两篇文章推荐看看:
http://www.ibm.com/developerworks/cn/linux/l-pyunit/
http://www.cnblogs.com/coderzh/archive/2010/08/23/custom-python-unittestoutput-as-gtest.html

有一个问题我还没找到答案,就是如何让单元测试框架的log输出到文件(默认输出到控制台)。
参考技术C 什么问题,详细点

移动测试之appium+python 入门代码

最近工作中想要做自动化回归测试,想法是将每个测试用例都做自动截图,然后将最近的稳定版本和当前测试的版本的两张截图去对比,也要将两个版本的截图都放到测试报告中方便人工来进行验证。最初想法是通过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模板中的截图还是写死的路径,如果能将截图的路径也能自动生成的话就更好了。
还有现在没有进行两个版本截图的对比,考虑继续寻找工具做截图的对比,并突出或标记上两张图片不相同的地方。

 

 

转载来源

 





以上是关于Python做软件自动化测试的入门提问的主要内容,如果未能解决你的问题,请参考以下文章

软件测试行情前景,你可以做测试多久?到底能干到多少岁?

学习python之路_入门篇A

移动测试之appium+python 入门代码

python接口自动化11-pytest入门

课后作业-阅读任务-阅读提问-2

干货!测试入门Python必会的21个知识点