Python实战项目:自动化测试综合

自动化测试案例

一、测试的概念

在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。

二、测试的分类

∑ 黑盒测试(Black-box Testing)

黑盒测试也称功能测试,测试中把被测的软件当成一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据与输出数据。

∑ 白盒测试(White-box Testing)

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒指的打开盒子,去研究里面的源代码和程序结果。

∑ 灰盒测试(Gray-Box Testing)

灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。

三、测试用例的概念

测试用例是为特定的目的而设计的一组测试输入、执行条件和预期的结果。测试用例是执行的最小实体。简单地说,测试用例就是设计一个场景,使软件程序在这种场景下,必须能够正常运行并且达到程序所设计的执行结果。

四、测试用例的特征

1.最有可能抓住错误的;

2.不是重复的、多余的;

3.一组相似测试用例中最有效的;

4.既不是太简单,也不是太复杂。

五测试用例举例

表中有测试输入/输出操作和期望结果。测试人员就是根据输入/输出的操作,看一下是否符合期望中的结果。

六、自动化测试

自动化测试是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。

比如:1、输入1000个用户名,可以将1000个用户名放到excel表中,然后利用程序自动读取excel表中1000个用户名,进行自动化模拟登录,避免了人员操作的繁琐性,同时也能避免人员操作的失误。

再比如:2、还是1000个用户名,还将1000个用户名放到excel表中,然后利用程序的多线程对1000个用户名进行读取,进行自动化模拟登录,这样就可以验证登录功能并发1000的性能,这是人工很难达到的。

七、Python自动化测试的模块

Python利用unittest和selenium结合达到自动化测试的目的。

八、用Python实现测试加法运算类的正确性。

步骤1:导入单元测试模块unittest

import unittest

步骤2:定义一个类,类名自定义,这里定义TestAdd。这个类继承于unittest.TestCase,TestCase意思是测试用例

class testAdd(unittest.TestCase):

步骤3:这里必须实现两个方法,这两个方法标志着每一个测试用例的开始和结束,一个方法名称叫setUp,一个方法叫tearDown,setUp是开始的方法,tearDown结束的方法。

class testAdd(unittest.TestCase):
    def setUp(self):
        print("测试用例的开始")
    def tearDown(self):
        print("测试用例的结束")

步骤4:完成一个比较简单的测试用例,验证加法运算.写一类,实现加法运算,这个类模拟成为开发者写的,写一个测试的方法,去测试开发者写的方法,是不是正确的.先实现开发者实现的加法类代码。

class AddNum():
    def add(self,a,b):
        return a,b

步骤5:在测试TestBaidu类中,实现两个测试用例的方法.

  ⇒第一个测试用例实现3+4=7

  ⇒第二个测试用例实现0.1+0.2=0.3

  ⇒注意:写测试用例时一个要下断言,assert是下断言的前缀,后面会跟不同的词做不同的断言方式,断言相当于把运行结果和期望结果进行对比,看是否满足最终的运行结果。

第一个测试用例的代码。

'''
自己定义的一个测试方法,第一个测试用例实现3+4=7
'''
def test_add(self):
    user=User()
    '''
    测试的目的是下断言,常用的断言是True或False
    assertEqual第一个参数断言的结果,后面是函数的使用
    '''
    self.assertEqual(7,user.add(3,4))

第二个测试用例的代码。

'''
自己定义的另一个测试方法,第二测试用例实现0.1+0.2=0.3
'''
def test_add_one(self):
    user=User()
    '''
    断言:0.1+0.2=0.3
    '''
    self.assertEqual(0.3,user.add(0.1,0.2))

步骤6:右键测试代码对应的py文件,直接执行用例,结果如下。

步骤7:这里没有设置代码if name=="main",设置了也不会去执行,需要进行一些设置。

设置步骤1:

设置步骤2:

设置步骤3:

设置步骤4:

设置后出现的结果:

现在添加主线程代码,即可运行主线程。

if __name__=="__main__":
    prnt("测试程序运行中")

八、用Python结合selenium实现百度输入框的有效性测试。

步骤1:写一个百度输入框有效性的测试用例代码。

'''
导入单元测试框架
'''
import unittest
from  selenium import webdriver
'''
    以下是测试人员写的测试百度
    1、测试百度搜入框的有效性
'''
    编写一个测试类
    TestCase是测试用例的意思
'''
class TestBaidu(unittest.TestCase):
    '''
        继承TestCase必须有的setUp用例启动的方法
    '''
    def setUp(self):
        '''
        启动模拟浏览器
        '''
        self.driver=webdriver.Firefox()
        self.driver.get("http://www.baidu.com")
    '''
        自己定义的一个测试方法,测试用例验证输入框有效性
    '''
    def test_input(self):
        '''
            find_element_by_id利用id找元素
        '''
        so=self.driver.find_element_by_id("kw")
        '''
            做断言,断言输入框的有效性 is_enabled()表示是否有效
        '''
        self.assertTrue(so.is_enabled(),True)

    '''
        继承TestCase必须有的tearDown用例结束的方法
    '''

    def tearDown(self):
        '''
            退出浏览器
        '''
        self.driver.quit()

步骤2:在if name=="_main"中写代码去执行。

if __name__=="__main__":
    print("测试用例的执行")
    '''
        定义unitest.TextTestRunner()对象
    '''
    test=unittest.TextTestRunner()
    '''
        执行这个test_input测试用例,只能执行一个用例,
    '''
    test.run(TestBaidu("test_input"))

步骤3:执行程序以后,控制台打印结果。

测试用例的执行

Ran 1 test in 8.597s

OK

九、将百度输入框的有效性测试输出到测试报告中。

执行以后,控制台打印结果一般在工作中不可取。需要打印测试报告,不能控制台去打印结果。打印测试报告的模块。html_testrunner,但是安装后需要修改才可以使用。同时,还要把测试用例放在测试套件中,即TestSuite,因为TestSuite可以接收很多个用例。

'''
执行多个用例用TestSuite
实例一个TestSuite
'''
suit=unittest.TestSuite()
'''
在TestSuite测试套件中加入"测试百度搜索框有效性"这个测试方法
'''
suit.addTest(TestBaidu("test_input"))
'''
不在控制台输出,打印测试报告,测试报告是一个文件html文件
'''
with open("files/result5.html","wb") as f:
    '''
    HTMLTestRunner测试报告第一个参数文件f,
    verbosity=2测试报告的详细情况,
    title测试报告名称,
    description测试报告描述情况
    '''
    runner=HTMLTestRunner(f,verbosity=2,title="百度搜索框有效测试用例",description="对百度搜索框有效度进行测试")
    runner.run(suit)

十、最终运行结果后,result5.html页面效果如下。

十一、不过这样的界面不是很友好,test_input测试用例不知道是做什么的,看起来很模糊。能不能使用中文名称来对方法名进行命名。

'''
    自己定义的一个测试方法,测试用例验证输入框有效性
'''
def 测试百度搜索框有效性(self):
    '''
    find_element_by_id利用id找元素
    '''
    so=self.driver.find_element_by_id("kw")
    '''
    做断言,断言输入框的有效性 is_enabled()表示是否有效
    '''
    self.assertTrue(so.is_enabled(),True)

十二、主程序的引用也需要中文处理。

'''
执行多个用例用TestSuite
实例一个TestSuite
'''
suit=unittest.TestSuite()
'''
在TestSuite测试套件中加入"测试百度搜索框有效性"这个测试方法
'''
suit.addTest(TestBaidu("测试百度搜索框有效性"))
'''
不在控制台输出,打印测试报告,测试报告是一个文件html文件
'''
with open("files/result5.html","wb") as f:
    '''
    HTMLTestRunner测试报告第一个参数文件f,
    verbosity=2测试报告的详细情况,
    title测试报告名称,
    description测试报告描述情况
    '''
    runner=HTMLTestRunner(f,verbosity=2,title="百度搜索框有效测试用例",description="对百度搜索框有效度进行测试")
    runner.run(suit)

十三、这样出现的结果就是中文了。

十四、再次修改HTMLTestRunner源码,可以将count,pass,fail,error转成中文。

十五、最后需要对测试的结果抓截图,更好地为程序发现bug服务。首先setUp方法中定义:

self.imgs=[]

在测试用例方法中,添加图片内容,抓图用

self.driver.get_screenshot_as_base64()

具体代码如下。

'''
自己定义的一个测试方法,测试用例验证输入框有效性
''
def 测试百度搜索框有效性(self):
    '''
    find_element_by_id利用id找元素
    '''
    so=self.driver.find_element_by_id("kw")
    '''
    添加截图功能,self.driver.get_screenshot_as_base64是截图的编码
    '''
    self.imgs.append(self.driver.get_screenshot_as_base64())
    '''
    做断言,断言输入框的有效性 is_enabled()表示是否有效
    '''
    self.assertTrue(so.is_enabled(),True)

十六、最后测试结果截图如下。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页