首页 > 其他分享 >UI自动化测试之五(UnitTest测试框架)

UI自动化测试之五(UnitTest测试框架)

时间:2022-09-20 16:02:02浏览次数:64  
标签:__ UnitTest driver UI 测试 div self def

UnitTest测试框架

 

1、测试用例

 

2、完整的测试流程需包含:

初始化

测试步骤

(1)、先执行setup()

(2)、执行测试点的代码

(3)、最后执行tearDown()

测试断言

(1)、in    关键字:assertIn

(2)、==   关键字:assertEqual

(3)、assertTrue/assertFalse

测试清理

3、规则

(1)、必须是以test开头的

(2)、每个测试点必须有标题

(3)、每个测试点必须有断言

(4)、测试点的名称不能一致

4、实战

需求:以新浪邮箱登录为例,验证自动登录的勾选以及用户名为空的出错信息

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

 

#新浪登录
class TestSina(unittest.TestCase):
    def setUp(self) -> None:
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('https://mail.sina.com.cn/')
        self.driver.implicitly_wait(30)

(1)、使用in断言用户名为空的错误信息

def test_sina_username(self):
    '''验证用户名为空的错误提示信息'''
    self.driver.find_element(By.CLASS_NAME, 'loginBtn').click()
    time.sleep(2)
    divText = self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]').text
    self.assertIn(divText,'请输入邮箱名')

(2)、使用==断言用户名为空的错误信息

def test_sina_username(self):         
    '''验证用户名为空的错误提示信息'''          self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
    time.sleep(2)
divText=self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]').text
    self.assertEqual(divText,'请输入邮箱名')

(3)、使用assertTrue/assertFalse断言自动登录有无勾选

def tests_isAuto_login(self):       
    '''验证自动登录已勾选'''             
    isLogin=self.driver.find_element(By.ID,'store1')
    time.sleep(2)
    #真真
    self.assertTrue(isLogin.is_selected())

def tests_isAuto_login1(self):
    '''验证自动登录没有被勾选'''
    #假假
    isLogin = self.driver.find_element(By.ID, 'store1')
    isLogin.click()
    time.sleep(2)
    self.assertFalse(isLogin.is_selected())

 

    # 清理
    def tearDown(self) -> None:
        self.driver.close()

if __name__ == '__main__':
    unittest.main()

5、测试套件/输出测试报告

1)、TestSuite:
执行测试套件(查找到符合要求的测试用例来执行)
把所有的测试模块放在测试套件里面来进行批量的执行

2)、输出报告

unittest+HTML TestRunner 来生成HTML的测试报告

(3)、实战

需求:将所有的测试用例进批量执行,并将结果输出为报告至testDev下的report文件夹内

注意:所有测试用例需与测试套件的模块在同级目录下

 

import unittest
import os
import HTMLTestRunner
#加载所有的测试模块
def allTests():
    '''使用测试套件加载所有的测试模块'''
    suite=unittest.TestLoader().discover(
        #查找路径
        start_dir=os.path.dirname(__file__),
        #查找所有的模块
        pattern='test_*.py')
    return suite

def base_dir():
    return os.path.dirname(os.path.dirname(__file__))          

def run():
    filename=os.path.join(base_dir(),'report','report.html')            
    fp=open(filename,'wb')                                                  
    runner=HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title='自动化测试报告',
        description='UI自动化测试报告')
    runner.run(allTests())


if __name__ == '__main__':
    run()

结果:

 

 

 

6、参数化
unittest参数化
用到的库:pip3 install parameterized
参数化:相同的测试步骤,不同的测试数据,那么这样的场景可以使用参数化,使用参数化可以有效的提升测试的效率

#使用参数化对新浪邮箱登录的的三个测试场景进行参数化
import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
import time as t
from parameterized import param,parameterized

class Init(unittest.TestCase):
    def setUp(self) -> None:
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('https://mail.sina.com.cn/')
        self.driver.implicitly_wait(30)

    def tearDown(self) -> None:
        self.driver.close()                                  
class TestSina(Init):                                        

    @parameterized.expand([
        param('','','请输入邮箱名'),                                           
        param('asdert','','您输入的邮箱名格式不正确'),
        param('[email protected]','sadsd','登录名或密码错误')                      
    ])
    

def test_sina_login_param(self,username,password,result):
        '''使用参数化覆盖上面的三个测试场景'''
        self.driver.find_element(By.ID, 'freename').send_keys(username)
        self.driver.find_element(By.ID, 'freepassword').send_keys(password)
        self.driver.find_element(By.CLASS_NAME,'loginBtn').click()
        t.sleep(3)
        divText = self.driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]')
        self.assertEqual(divText.text,result)


if __name__ == '__main__':
    unittest.main()

标签:__,UnitTest,driver,UI,测试,div,self,def
From: https://www.cnblogs.com/L2119/p/16711338.html

相关文章