unittest测试框架(11)

二、unittest测试框架
1.unittest原名PyUnit,是Python语言自带的单元测试框架。Selenium WebDriver功能自动化测试和Appium手机自动化测试和接口测试都可以继承unittest框架来管理代码。
2.集成unittest框架的原因:
(1)在一个unittest的测试用例脚本文件里可以包含多个测试用例代码实现内容,可以统一管理,方便维护。
(2)可以批量运行。
(3)实现代码的复用。
(4)有大量的日志。
(5)提供了很多断言方法,利用它们检查界面上的数据。
(6)测试结果报告展示得更清晰明了。
3.用unittest框架做单元测试的步骤:
(1)被测模块:day07包里的cal.py,新建Cal类,定义构造函数传入两个属性值代表两个加数,定义add函数实现两个加数加法计算功能,最后把结果用返回值返回。
示例:day07\cal.py

class Cal():
    def __init__(self,x,y): --注意构造函数不要写错!
        self.x=x
        self.y=y
    def add(self):
        return self.x+self.y                

(2)设计单元测试的测试用例:
用例1:x=20 y=30,检查add函数能返回预期值50
用例2:x=-100 y=-10 检查add函数能返回预期值-110
用例3:x=1.3 y=2.1 检查add函数能返回预期值3.4
……
(3)实现单元测试的测试代码:在day07包上右击菜单里选择New---Python file,选择文件类型是Python unit test,输入文件名称testcal,OK,自动生成了一些代码。
示例:

# 导入unittest模块
import unittest
# 定义一个类,默认类名是MyTestCase(可修改),该类是unittest模块里的TestCase类的子类。
class MyTestCase(unittest.TestCase):
# 以test开头命名的函数,叫做测试函数,至少要有1个
def test_something(self):
# 调用父类TestCase里提供的断言方法来检查数据。
self.assertEqual(True, False)
# 判断当前脚本代码没有被其他模块调用,自己独立运行时,一般在这个分支时,写测试代码来测试当前模块。
if __name__ == '__main__':
# 调用unittest模块里的main函数(程序执行入口),该函数会自动帮我们来实例化上面的测试用例类,并且自动依次调用所有测试函数。
unittest.main()
(4)#在测试代码(testcal.py)开头处导入被测模块里的被测类(cal.py里Cal类)。
from day07.cal import Cal

(5)每一条测试用例准备一个测试函数:比如有3条测试用例,就需要准备3个测试函数,实例化被测类,调用被测函数,接收返回来的数据,用父类里提供的断言方法检查该数据是否符合预期要求。
示例:

def test_1(self): ---test开头的函数就是测试函数
    c1=Cal(20,30) ---实例化被测类
    r1=c1.add() ---调用被测函数,接收返回来的数据
    self.assertEqual(50, r1) ---检查返回值
def test_2(self):
    c2=Cal(-100,-10)
    r2=c2.add()
    self.assertEqual(-110,r2)
def test_3(self):
    c3=Cal(1.3,2.1)
    r3=c3.add()
    self.assertAlmostEqual(3.4,r3,2)

(6)运行代码时,建议把光标定位在代码末尾,右击菜单里选择Run Unittests……来运行,这样此类里所有测试函数都会参与运行。
(7)补充:在每个测试函数执行前,如果都需要做相同的准备工作,可以把这样的步骤写在名称为setUp的函数里,在每个测试函数执行后,如果都需要做相同的收尾工作,可以把这样的步骤写在名称为tearDown的函数里。这样运行时按照setUp---test_xxx---tearDown---setUp---test_yyy---tearDown……这样的顺序来运行。
示例:
def setUp(self):
print("做准备工作,例如打开数据库连接、打开外部文件等")
def tearDown(self):
print("做清理和收尾工作,例如关闭数据库连接、关闭外部文件等")
4.用unittest框架做Selenium WebDriver测试的步骤:
(1)案例:
用例1:启动Firefox,打开ECShop前台首页,输入关键字a,点击搜索,等待3秒,关闭浏览器
用例2:启动Firefox,打开ECShop前台登录页,输入用户名abc和密码123,点击“立即登陆”,等待3秒,关闭浏览器
用例3:启动Firefox,打开ECShop前台留言板页,输入电子邮件地址lisi@123.com,点击“我要留言”,等待3秒,关闭浏览器。
……
(2)新建day07包里的case7004.py,选择文件类型是Python unit test,导入selenium相关资源:
示例:

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By

(3)在该类里定义名称是setUp的函数,在该函数体里写启动Firefox和隐式等待的步骤。
注意:driver变量想要在整个类里使用,必须加self.
示例:

def setUp(self):
    self.driver=webdriver.Firefox()
    self.driver.implicitly_wait(15)

(4)在该类里定义名称是tearDown的函数,在该函数体里写等待和关闭浏览器的步骤。
示例:

def tearDown(self):
    sleep(3)
    self.driver.quit()

(5)按照测试用例数,创建多个测试函数,每个测试函数中书写打开xxx网页、定位xxx元素、操作xxx、检查xxx数据等步骤。
示例:

1 def test_1(self):
2     self.driver.get("http://localhost/upload/index.php")
3     guan=self.driver.find_element(By.ID,"keyword")
4     guan.send_keys("a")         
5     sou=self.driver.find_element(By.CLASS_NAME,"go")
6     sou.click()    

(6)运行时,把光标放在代码末尾,右击菜单里选择Run Unittests……



 

posted @ 2020-12-18 13:59  藤上小冬瓜  阅读(186)  评论(0编辑  收藏  举报