Time will tell.
Selenium WebDriver 是一个浏览器自动化测试的 API 集合。它提供了很多与浏览器自动化交互的特性,并且这些 API 主要是用于测试 Web 程序。
如果仅仅使用 Selenium WebDriver ,我们无法实现执行测试前置条件、测试后置条件,比对预期结果和实际结果,检查程序的状态,生成测试报告,创建数据驱动的测试等功能。
Unittest(一般称为PyUnit) 是从 Java 程序开发中广泛应用的 JUnit 启发而来的。Unittest 使我们具备创建测试用例、测试套件、测试夹具的能力。
Arrange:
Act:
Assert:
通过继承TestCase
类并且在测试类中为每一个测试添加测试方法来创建单个测试或者一组测试。
(1)定义一个继承于TestCase
类的子类。
(2)在类中定义setUp()
方法。
(3)编写测试方法
(4)代码清理(在类中定义tearDown()
方法)
(5)运行测试
1、一个测试用例是从setUp()
方法开始执行的,我们可以用这个方法在每个测试开始前去执行一些初始化的任务。可以是这样的初始化准备:比如创建浏览器实例,访问 URL ,加载测试数据和打开日志文件等。此方法没有参数,而且不返回任何值。当定义了一个setUp()
方法,测试执行器在每次执行测试方法之前优先执行该方法。
2、有了setUp()
方法,就可以写一些测试用来验证我们想要测试的程序的功能。测试方法命名以test
开头,这种命名约定通知 test runner 哪个方法代表测试方法。
3、类似于setUp()
方法在每个测试方法之前被调用,TestCase
类也会在测试执行完成之后调用tearDown()
方法来清理所有的初始化值。一旦测试被执行,在setUp()
方法中定义的值将不再需要,所以最好的做法是在测试执行完成的时候清理掉由setUp()
方法初始化的数值。
data
,创建一个文件category.txt
录入以下数据:
编程语言、Java、C++、PHP、Delphi、Python、Ruby、C语言、Erlang、Go、Swift、Scala、R语言、Verilog其它语言。
测试博客园首页编程语言下的分类信息是否与预期结果一致:
import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
class SearchTest (unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(10)
self.driver.maximize_window()
self.driver.get("https://www.cnblogs.com/")
def test_search_by_category(self):
#读取category.txt文件,返回一个字典
with open('data/category.txt', encoding='UTF-8') as category_file:
category_dict = dict()
category_data = category_file.readline().strip().split(',')
the_class = category_data.pop(0)
category_dict[the_class] = category_data
#定位首页网站分类中的编程语言
self.seach_class = self.driver.find_element_by_xpath('//li/a[@href="/cate/2/"]')
#光标悬停在“编程语言”上
ActionChains(self.driver).move_to_element(self.seach_class).perform()
# 以列表形式返回编程语言下的所有小类
seach_small = self.driver.find_elements_by_xpath( '//div[@id="cate_content_block_2"]/div[@class="cate_content_block"]/ul/li')
#休眠3秒
time.sleep(3)
small_cate = []
for s in seach_small:
#去掉小类最后面的3个字符(0),并添加到列表small_cate中
small_cate.append(str(s.text)[:-3])
#检查表达式是否为true(此处检查编程语言下的小类是否与预期结果一致)
self.assertTrue(small_cate == category_dict["编程语言"])
# self.assertEqual(small_cate,category_dict["编程语言"])
def tearDown(self):
self.driver.quit()
#加上下面2句,可以通过命令行运行测试,不加的话不影响通过IDE运行测试
if __name__ == '__main__':
#加verbosity=2参数,在命令行中显示具体的测试方法
unittest.main(verbosity=2)
测试是一门技术,也是一门艺术。也许你今天拥有的技术,明天就会淘汰。我们需要开拓思维和眼界,积极拥抱变化,学习新知识、新方法、新技能、计算机领域讲究的是实践,学习更要讲究方式方法,学习和动手一定要结合。
好喽,本章节内容就到这里,如果你对Python自动化软件测试、面试题等更多内容感兴趣,在这里推荐一个学习资料分享群:175317069。有各项已整理好的测试学习资源,也有行业深潜多年的技术人分析讲解。
测试工程师职业发展路线:
功能测试 — 接口测试 — 自动化测试 — 测试开发 — 测试架构师
最后希望看到这里的你终成为一名极具竞争力的高级测试工程师。
Time will tell.(时间会说明一切)