Unittest自动化测试框架教程(一)——Python中测试用例基本框架介绍(附实例演示)

基础框架

import unittest

class BasicTestCase(unittest.TestCase):  # 设置基础测试类名,继承库中测试用例的属性
    # setUp()和tearDown()是每个测试用例进行时都会执行的测试方法,前者为起始,后者为结束
    # 程序执行流程:setUp()-test1()-tearDown()---setUp()-test2()-tearDown()---
    def setUp(self):  # 复写父类的方法,Pycharm环境左侧有标识,是每一个测试用例都会执行的"起始方法"
        pass  # 自定义设置开始步骤

    def tearDown(self):  # 复写父类的方法,Pycharm环境左侧有标识,是每一个测试用例都会执行的"结束方法"
        pass  # 自定义设置结束步骤

    def way(self):  # 根据实际需求编写的测试方法
        pass

    def test1(self):  # 设置测试用例1,命名为test+xxx,会按照test后的阿拉伯数字顺序执行,testdemo也执行,带test都会执行
        pass  # 执行程序+断言(自定义断言方法,灵活多变)

    def test2(self):  # 设置测试用例2
        pass  # 执行程序+断言(自定义断言方法,灵活多变)


if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()  # 调用主函数进行多个测试用例测试

基础框架实例演示 

  • 以测试自定义网站的登录功能为例
  • Demo演示

  • 代码详解
import unittest
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

class BasicTestCase(unittest.TestCase):     # 设置基础测试类名,继承库中测试用例的属性

    # setUp()和tearDown()是每个测试用例进行时都会执行的测试方法,前者为起始,后者为结束
    def setUp(self):    # 复写父类的方法,最左侧有标识,是每一个测试用例都会执行的 起始方法
        # 自定义设置开始步骤
        ########################################
        # 示例:
        # 使用浏览器载入登录页面流程,每个测试用例都会执行
        # 注意驱动写作self.driver,否则会变成方法变量,而不是实例变量
        s = Service(r'F:\Download\Browser\Edge\chromedriver.exe')  # 设置驱动所在路径
        self.driver = webdriver.Chrome(service=s)  # 从路径提取驱动
        self.driver.implicitly_wait(10)  # 设置每个步骤最大等待时间
        self.driver.get('http://localhost:8001/login/')  # GET方法访问本机端口,即注册页面
        self.driver.maximize_window()   # 最大化窗口

    def tearDown(self):     # 复写父类的方法,最左侧有标识,是每一个测试用例都会执行的 结束方法
        # 自定义设置结束步骤
        ########################################
        # 示例:
        # 关闭浏览器页面,每个测试用例都会执行
        self.driver.close()

########################################################################################

    def input(self, user=None, password=None, vcode=None):  # 根据实际需求编写的测试方法
        ########################################
        # 示例:
        # 写入用户名,密码,验证码,并且点击登录
        if user:    # 设定判定条件,有输入才键入,否则不键入
            self.driver.find_element('id', 'LAY-user-login-username').send_keys(user)   # 将参数键入指定位置
        if password:
            self.driver.find_element('id', 'LAY-user-login-password').send_keys(password)
        if vcode:
            self.driver.find_element('id', 'LAY-user-login-vercode').send_keys(vcode)
        self.driver.find_element('id', 'loginButton').click()   # 点击登录按钮
        pass
########################################################################################
    def test1_login_success(self):    # 设置测试用例1,测试成功登录的情况,命名为test+xxx,会按照test后的阿拉伯数字顺序执行,testdemo也执行,带test都会执行
        # 执行+断言(自定义断言方法,灵活多变)
        ########################################
        # 示例:
        # 执行
        user, password, vcode = 'admin', '123456', '1234'   # 给定参数
        self.input(user, password, vcode)   # 传入参数给测试方法,并通过self.实例调用方法
        # 断言
        time.sleep(2)   # 断言之前要设置一定时间,以便浏览器反应
        # 注意此断言方法的文本属性.text
        self.assertEqual(self.driver.find_element('class name', 'layui-logo').text, '接口自动化测试')
        # 断言因素必须得设置注册页的元素而不是跳转后页面的元素

    def test2_errorpassword(self):    # 设置测试用例2,测试输入7位错误密码的情况
        # 执行+断言(自定义断言方法,灵活多变)
        ########################################
        # 示例:
        # 执行
        user, password, vcode = 'admin', '1234567', '1234'   # 给定参数
        self.input(user, password, vcode)   # 传入参数给测试方法,并通过self.实例调用方法
        # 断言
        time.sleep(1)   # 断言之前要设置一定时间,以便浏览器反应
        # 注意此断言方法的文本属性.text
        self.assertEqual(self.driver.find_element('class name', 'layui-layer-title').text, '出错了')


if __name__ == '__main__':  # 设定条件执行unittest的主函数
    unittest.main()     # 调用主函数进行多个测试用例测试

你可能感兴趣的