自动化测试-UnitTest框架基础学习+简单的实例应用(csdn登录页)

ps:我的小习惯,不管懂不懂,先去找找别人的实例,运行看看,再去仔细看看怎么用.....

目录

1、什么是UnitTest框架

2、为什么用UnitTest框架

3、UnitTest的核心要素

4、TestCase:测试用例---步骤--实例

5、 TestSuite:测试套件

6、TextTestRunner:执行测试套件

7、TestLoader:批量执行测试用例

8、Fixture:装置函数(setUp、tearDown)

9、断言:让程序代替人为判断测试程序执行结果是否符合预期结果的过程

10、实例(根据自己要测试的网页,调整元素;大概是这么个模板)



1、什么是UnitTest框架

        是python自带的一个单元测试框架,用它来做单元测试

2、为什么用UnitTest框架

        能够批量执行用例

        提供丰富的断言知识

        可以生成测试报告

3、UnitTest的核心要素

        TestCase:测试用例

        TestSuite:测试套件

        TextTestRunner:以文本的形式运行测试用例

        TestLoader:批量执行测试用例,搜索指定文件夹内指定字母开头的模块(推荐)

        Fixture:固定装置(两个固定的函数,一个初始化时使用,一个结束时使用

4、TestCase:测试用例---步骤--实例

        1.导包:import unittest

        2.测试方法必须以 test 字母开头

        3.新建测试类并继承 unittest.TestCase

# 编写求和测试函数
# 导包
import unittest

# 编写求和函数
def add(x,y):
    return x+y

# 定义测试类,并继承(定义类以大写字母开头)
class Test01(unittest.TestCase):
    # 定义测试方法,以test字母开头
    def test_add01(self):
        # 调用
        result = add(1,1)
        print("结果为:",result)

    def test_add02(self):
        # 调用
        result = add(2, 1)
        print("结果为:", result)
        print("——name——内置变量获取当前运行的模块名称:",__name__)

5、 TestSuite:测试套件

        1.导包

        2.获取测试套件对象 suite = unittest.TestSuite()

        3.调用addTest()方法,添加测试用例

                添加用例2:suite.addTest(unittest.makeSuite(类名)) #添加指定类中所有test开头的方法

                添加用例1:suite.addTest(类名("方法名")) #添加指定类中指定测试方法

6、TextTestRunner:执行测试套件

        1.导包

        2.实例化后去执行套件对象:runner = unittest.TextTestRunner()

        3.调用run方法去执行:runner.run(suite)

"""t03_TestSuite.py"""
"""
1、导包
2、实例化获取TestSuite对象
3、调用addTest方法添加用例到指定套件中
"""
import unittest
from script_unittest.t01_TestCase import Test01
from script_unittest.t01_TestCase import Test02
# 实例化,获取suite对象
suite = unittest.TestSuite()

# 调用添加方法
# 写法1   类名("方法名")   # 方法名称使用双引号
suite.addTest(Test01("test_add01"))
suite.addTest(Test01("test_add02"))

# 写法2   扩展 添加测试类中所有test开头的方法
suite.addTest(unittest.makeSuite(Test02))

# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

7、TestLoader:批量执行测试用例

        1.将符合条件的测试方法添加到测试套件中

        2.搜索指定目录文件下指定字母开头的模块文件下的test方法,并将这些方法添加到测试套件中,最后返回测试套件

        3.步骤

        导包:import unittest

        调用TestLoader()

                suite = unittest.TestLoader().discover("./cases",pattern="tpshop*.py")

                suite = unittest.TestLoader().discover("指定搜索的目录文件",“指定字母开头的模块文件”)

        执行测试套件

                unittest.TextTestRunner().run(suite)

8、Fixture:装置函数(setUp、tearDown)

        函数级别:def setUp() / def tearDown()

                特性:几个测试函数执行几次

        类级别:def setUpClass() / def tearDownClass()

                类方法必须使用 @classmethod修饰

                特性:测试类运行之前执行一次setUpClass,运行之前执行一次tearDownClass

        模块级别:def setUpModule() / def tearDownModule()

                模块运行之前执行一次setUpModule,运行之前执行一次tearDownModule

import unittest
class Test03(unittest.TestCase):

    # 类方法修饰
    @classmethod
    def setUpClass(cls):
        print("setUpClass被执行")

    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass被执行")

    def setUp(self):
        print("setUp被执行")

    def tearDown(self) -> None:
        print("tearDown被执行")

    def test01(self):
        print("test01被执行")

    def test02(self):
        print("test02被执行")

9、断言:让程序代替人为判断测试程序执行结果是否符合预期结果的过程

# 语法使用
import unittest
class Test04(unittest.TestCase):

    def test01(self):
        # # 断言是否为True
        flag = True
        self.assertTrue(flag)
        # flag = False
        # self.assertFalse(flag)

        # 判断两个字符串是否相等
        self.assertEqual("90","09")

        # 判断后面的字符串是否包含前面的字符串
        self.assertIn('119',"119  00")
        self.assertIn("119 110","119,120,110")

10、实例(根据自己要测试的网页,调整元素;大概是这么个模板)

"""
输入:错误用户名或密码
断言:提示信息是否与预期结果一致
要求:如果断言出错,截屏保存
"""
# 导包
import unittest
from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By


# 定义测试类,并继承unittest.testcase
class TestcsdnLogin(unittest.TestCase):

    # 定义初始化方法
    def setUp(self) -> None:
        # 获取浏览器驱动对象
        self.driver = webdriver.Chrome()
        # 打开url
        self.driver.get("https://passport.csdn.net/login?code=applets")
        # 浏览器窗口最大化
        self.driver.maximize_window()
        # 设置隐式等待
        self.driver.implicitly_wait(10)
        pass

    # 定义teardown
    def tearDown(self) -> None:
        sleep(2)
        self.driver.quit()
        # 关闭浏览器驱动对象
        pass

    # 定义登录测试方法,用户名或密码错误
    def test_login_code(self):
        driver = self.driver
        sleep(3)
        # 点击登录链接,xpth的值核对下
        driver.find_element(By.XPATH, "/html/body/div[2]/div/div[2]/div[2]/div[2]/div/div[1]/span[4]").click()
        # 输入用户名,,xpth的值核对下
        driver.find_element(By.XPATH,
                            "/html/body/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div/div[1]/div/input").send_keys(
            "18700001111")
        # 输入密码,xpth的值核对下
        driver.find_element(By.XPATH,
                            "/html/body/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/div/div[2]/div/input").send_keys(
            "Abc12345678")
        # 勾选协议,,xpth的值核对下
        driver.find_element(By.XPATH, "/html/body/div[2]/div/div[2]/div[2]/div[2]/div/div[2]/p/div/i").click()
        # 点击登录
        driver.find_element(By.CSS_SELECTOR, ".base-button").click()
        sleep(2)
        # 获取登录后的提示信息
        result = driver.find_element(By.CLASS_NAME, "login-form-error").text
        print("result为:", result)
        # 定义预期结果
        excert_result = "用户名或密码错误"
        try:
            # 断言
            self.assertEqual(result,excert_result)
          
        except AssertionError:
            # 截图
            driver.get_screenshot_as_file("../{}.png".format(time.strftime("%Y_%m_%d_%H_%M_%S")))
            # 抛异常
            raise

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值