selenium(8)断言,unittest

Selenium中的断言用于验证应用程序的状态是否与所期望的一致。

在使用Selenium进行自动化测试时,断言通常用于以下方面:

  • 页面属性断言:断言标题、URL或页面源码中是否包含或不包含特定字符。这是最常用的断言方式,可以用来断言页面是否正常打开,是否在指定的窗口及页面上。
  • 元素存在断言:断言指定元素是否存在。这可以通过try...except捕获并抑制元素定位不到的异常,或者使用find_elements+判断返回的元素列表是否为空来实现。
  • 图片及链接断言:断言图片正常显示、链接可以正常打开

Selenium提供了三种模式的断言:assert、verify和waitfor。

  1. Assert:当Assert失败时,该测试将终止。
  2. Verify:当Verify失败时,该测试将继续执行,并将错误记入日志显示屏。也就是说,允许此单个验证通过。
  3. Waitfor:用于等待某些条件变为真。这可以用于AJAX应用程序的测试。如果该条件为真,它们将立即成功执行。如果该条件不为真,则将失败并暂停测试,直到超过当前所设定的超时时间。

在Python中使用Selenium进行自动化测试时,Assert断言是一个非常重要的工具,用于验证页面元素的状态、属性和行为是否符合预期。如果断言失败,测试将抛出AssertionError异常,并且测试将终止。

 

assertEquals(expected, actual): 检查实际值与预期值是否相等

assertTrue(condition): 检查给定的条件是否为真。

assertFalse(condition): 检查给定的条件是否为假

assertNull(object) 和 assertNotNull(object): 分别用于检查对象是否为null或不为null

 

Selenium本身并不直接提供断言方法,但Python的标准库中的unittest模块提供了丰富的断言方法。以下是如何在Python Selenium测试脚本中使用unittest模块中的Assert断言的示例:

首先,你需要导入unittest模块,并在你的测试类中继承unittest.TestCase。然后,你可以使用unittest提供的各种断言方法。

unittest是Python单元测试框架

 

1.test fixture(测试固件):存了类里面固定的方法,初始化和清理测试环境,比如创建临时的数据库,文件和目录等
2.test case:单元测试用例,TestCase 是编写单元测试用例最常用的类
3.test suite(测试套件):把测试方法放到容器里,单元测试用例的集合,TestSuite 是最常用的类
4.test runner:执行单元测试
5.test report:生成测试报告
测试固件:

测试固件是在测试运行之前和之后执行的一系列操作,用于准备测试所需的环境,以及在测试完成后清理这些环境。

unittest框架中,测试固件主要通过以下三个方法来实现:

  1. setUp(): 每个测试方法执行前都会调用此方法。它通常用于初始化测试环境,比如启动浏览器、打开网页等。

  2. tearDown(): 每个测试方法执行后都会调用此方法。它通常用于清理测试环境,比如关闭浏览器窗口、断开数据库连接等。

  3. setUpClass() 和 tearDownClass(): 这两个方法分别在测试类中的所有测试方法执行之前和之后调用一次。它们通常用于执行更耗时的操作,如启动和关闭整个浏览器实例,而不是每个测试方法都启动和关闭。

unittest中测试用例方法都是以test开头的,否则不被unittest识别,执行顺序根据(0-9,A-Z,a-z),如:test01,testaa

 测试步骤:

1. 导入unittest模块

2. 创建一个测试类,并继承unittest.TestCase()

3. 定义测试方法,方法名必须以test_开头,否则不会被检测

4. 调用unittest.main()方法来运行测试用例,unittest.main()方法会搜索该模块下所有以test开头的测 试用例方法,并自动执行

5. 每一个用例执行的结果的标识,OK OR FALSE

例子:执行所有的测试

unittest框架提供了unittest.main()函数,它可以自动发现并执行当前模块中的所有测试。

你只需要在脚本的最后调用if __name__ == "__main__": unittest.main()即可。

这会自动查找所有继承自unittest.TestCase的类,并执行其中的测试方法。

import time
import unittest
from selenium import webdriver

class assert_testTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None :
cls.driver=webdriver.Chrome()
cls.driver.implicitly_wait(10)
cls.driver.get('http://www.huangjinjiage.cn/talk/20211208/13752.html')
cls.driver.maximize_window()
time.sleep(3)
print('setUpClass所有测试方法执行之前执行一次')

@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
print('tearDownClass所有测试方法之后调用一次')

def setUp(self) -> None:
print('setUp每个测试方法执行前可以进行的操作')
self.driver.refresh()

def tearDown(self) -> None:
print('tearDown每个测试方法执行后可以进行的操作')

def haha(self):
print('方法,名不带test不会被执行')

def test_gold_title_false(self):
a = self.driver.title
b = '中国黄金'
self.assertEqual(a, b, '页面标题,不正确')
print('具体测试方法1')

def test_gold_title(self):
a=self.driver.title
b='中国黄金'
self.assertNotEqual(a,b,'页面标题不正确')
print('具体测试方法2')

def test_gold_url(self):
a=self.driver.current_url
b='http://www.huangjinjiage.cn/talk/20211208/13752.html'
self.assertEqual(a,b,'url不对')
print('具体测试方法3')


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


例子:执行其中一个测试
if __name__=="__main__":
suite=unittest.TestSuite()
testcase1=assert_testTest('test_gold_title')
suite.addTest(testcase1)
running=unittest.TextTestRunner()
running.run(suite)

例子:执行部分的测试
if __name__=="__main__":
suite=unittest.TestSuite()
testcase1=assert_testTest('test_gold_title')
testcase2 = assert_testTest('test_gold_title_false')
suite.addTest(testcase1)
suite.addTest(testcase2)
running=unittest.TextTestRunner(verbosity=2)
running.run(suite)

 

posted @ 2024-03-27 10:22  越长大越孤单哦  阅读(15)  评论(0编辑  收藏  举报