一、选择合适的测试框架
自动化测试中,选择合适的测试框架是十分重要的,Python中也有很多测试框架可供选择。
1、unittest
import unittest
class MyTest(unittest.TestCase):
def test_add(self):
self.assertEqual(1+2, 3)
if __name__ == '__main__':
unittest.main()
unittest
是Python的内置测试框架,支持各种测试类型(单元测试、功能测试等)。通过 assertEqual
等断言方法可以判断测试结果是 True
还是 False
。
2、pytest
def test_add():
assert 1 + 2 == 3
pytest
是一种第三方测试框架,具有更好的可扩展性和易用性。比如可以使用 fixture
来管理测试环境等。
3、Robot Framework
*** Settings ***
Library SeleniumLibrary
*** Variables ***
${BROWSER} firefox
${LOGIN_URL} https://github.com/login
*** Test Cases ***
Login Test
Open Browser ${LOGIN_URL} ${BROWSER}
Input Text //*[@id="login_field"] ${USERNAME}
Input Text //*[@id="password"] ${PASSWORD}
Click Button //*[@id="login"]/form/div[3]/input[4]
Robot Framework 具有清晰简洁的测试语法,可读性和可维护性都很好。它支持多种测试类型,且可以集成各种第三方库。
二、使用Python包管理器
在Python中,使用包管理器可以让自动化测试更加方便。
1、pip
pip install requests
pip install pytest
pip
是Python的内置包管理器,可以方便地下载、安装、管理Python模块。
2、virtualenv
virtualenv venv
source venv/bin/activate
pip install requests
pip freeze > requirements.txt
虚拟环境可以避免Python应用之间的干扰,同时也可以方便地管理依赖包。
三、创建易于维护的测试脚本
创建易于维护的测试脚本是自动化测试中的一大挑战。
1、分离测试数据
class MyTest(unittest.TestCase):
def test_add(self):
data = [1, 2, 3]
expected = 6
result = sum(data)
self.assertEqual(result, expected)
将测试数据与脚本分离,可以使测试数据得到重复使用,同时也可以更容易地进行维护。
2、编写清晰的注释
def test_login():
"""
测试登录功能:
1. 打开登录页面
2. 输入用户名
3. 输入密码
4. 点击登录按钮
"""
...
在测试脚本中编写清晰的注释,可以方便其他开发者理解测试流程和思路。
3、使用Page Object模式
class LoginPage:
def __init__(self, driver):
self.driver = driver
self.username_locator = '//*[@id="login_field"]'
self.password_locator = '//*[@id="password"]'
self.login_btn_locator = '//*[@id="login"]/form/div[3]/input[4]'
def input_username(self, username):
self.driver.find_element_by_xpath(self.username_locator).send_keys(username)
def input_password(self, password):
self.driver.find_element_by_xpath(self.password_locator).send_keys(password)
def click_login_btn(self):
self.driver.find_element_by_xpath(self.login_btn_locator).click()
def test_login():
lp = LoginPage(driver)
lp.input_username(username)
lp.input_password(password)
lp.click_login_btn()
使用 Page Object 模式可以使测试脚本更加模块化,可维护性更强。
四、加入报告和日志
自动化测试中加入报告和日志是十分重要的,它可以让测试结果更加可读性强。
1、HTMLTestRunner
import HTMLTestRunner
fp = open('report.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='Test Report',
description='Test Report'
)
runner.run(suite)
fp.close()
HTMLTestRunner
可以生成美观的测试报告,方便查看测试结果和测试流程。
2、logging
import logging
def test_logging():
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
logging
可以记录系统的运行情况,可用于排查问题和改进测试策略。
五、持续集成
持续集成可以自动执行测试脚本,及时反馈测试结果和问题。
1、Travis CI
language: python
python:
- "3.6"
install:
- pip install -r requirements.txt
script:
- pytest
Travis CI 是目前比较流行的持续集成工具,它可以自动执行测试脚本,且可以与 GitHub 等平台进行集成。
2、Jenkins
Jenkins 是另一款可供选择的持续集成工具,它具有更强的扩展性和定制性,可以满足更高级的自动化需求。
六、总结
以上为 Python 编写自动化测试脚本的一些实践经验,这些经验可以帮助我们更好地进行测试工作,提高测试效率和质量。