下面我将为你详细讲解“python自动化测试三部曲之unittest框架的实现”的完整攻略。
一、什么是unittest框架
unittest框架是Python自带的一个单元测试框架,用于编写单元测试用例并进行自动化测试。
常用的单元测试框架包括unittest、pytest等,在学习自动化测试时需多了解这些框架的原理与使用方法。
二、unittest框架的实现
1. 编写测试用例
编写测试用例是unittest的第一步。在unittest中,每个测试用例都是一个函数,命名规范为test_开头。下面是一个简单的测试用例:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
if __name__ == '__main__':
unittest.main()
在这个测试用例中,我们使用unittest模块中的TestCase类,该类提供了很多内置的断言方法(如assertEqual、assertTrue等)用于判断测试结果是否符合预期。
2. 运行测试用例
运行测试用例的方式有两种,一种是使用命令行方式,另一种是使用PyCharm等IDE工具。
命令行方式:
在命令行中执行python xxx.py
即可运行测试用例。其中,xxx.py为测试用例所在的Python文件名。
IDE工具方式:
在PyCharm中,运行测试用例分为两种方式:一种是右键点击测试用例文件中的类或者方法名,选择Run 'xxx'即可运行;另一种是在PyCharm的Run界面中新建Python测试配置,选择要运行的测试用例文件及对应的测试方法名。
3. 测试报告生成
测试报告的生成可以使用xmlrunner、HtmlTestRunner等第三方库,也可以使用unittest自带的TextTestRunner。
使用TextTestRunner生成测试报告的示例如下:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)
unittest.TextTestRunner(verbosity=2).run(suite)
在以上示例中,通过unittest.TestLoader().loadTestsFromTestCase()方法加载测试用例,再将测试结果输出到控制台。
三、示例说明
1. 自动化测试网站登陆功能
下面是一个示例,用unittest框架实现一个网站的登陆功能测试用例。
import unittest
from selenium import webdriver
class TestLogin(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome() # 初始化浏览器
self.driver.get('https://www.example.com') # 打开被测网站
def test_login_success(self):
driver = self.driver
# 执行登录操作
driver.find_element_by_id('username').send_keys('user')
driver.find_element_by_id('password').send_keys('passwd')
driver.find_element_by_id('submit').click()
# 断言:判断登录是否成功
self.assertIn('欢迎您', driver.page_source)
def test_login_failure(self):
driver = self.driver
# 执行登录操作
driver.find_element_by_id('username').send_keys('wrong_user')
driver.find_element_by_id('password').send_keys('wrong_passwd')
driver.find_element_by_id('submit').click()
# 断言:判断登录失败信息是否显示
self.assertIn('用户名或密码错误', driver.page_source)
def tearDown(self):
self.driver.quit() # 关闭浏览器
if __name__ == '__main__':
unittest.main()
在这个示例中,我们使用unittest框架编写了两个测试用例:test_login_success和test_login_failure,分别测试了登录成功和登录失败的情景,并用断言方式进行验证。
2. 自动化测试API接口
下面是一个示例,用requests库和unittest框架实现一个接口测试的用例。
import unittest
import requests
class TestApi(unittest.TestCase):
def test_get_user_info(self):
# 使用requests库请求目标接口
url = 'https://api.example.com/userinfo'
headers = {'Authorization': 'Bearer ' + self.token}
response = requests.get(url, headers=headers)
# 断言:判断返回状态码和响应内容是否符合预期
self.assertEqual(200, response.status_code)
self.assertEqual('Alice', response.json().get('name'))
def test_update_user_info(self):
# 使用requests库请求目标接口
url = 'https://api.example.com/userinfo'
headers = {'Authorization': 'Bearer ' + self.token}
data = {'name': 'Bob'}
response = requests.put(url, headers=headers, json=data)
# 断言:判断返回状态码和响应内容是否符合预期
self.assertEqual(200, response.status_code)
self.assertEqual('Bob', response.json().get('name'))
def setUp(self):
# 获取接口token并存储在self.token中
self.token = 'xxxxxxxx'
if __name__ == '__main__':
unittest.main()
在这个示例中,我们使用requests库发送get和put请求,并在每个测试用例中添加了相应的断言判断。其中,setUp()函数用于前置处理,获取API接口的token并存储在变量self.token中,用于每个测试用例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动化测试三部曲之unittest框架的实现 - Python技术站