
最近很多朋友在问:“二黑,我想学自动化测试,但环境都搭不起来,老是报错怎么办?”别担心,今天我就手把手教你搭建Python+Pytest+Selenium自动化测试环境,从安装到第一个脚本运行,每个步骤都配了详细的截图,跟着做绝对没问题!
先简单说说为什么推荐这个组合:
Python:语法简单,上手快,社区资源丰富,绝对是自动化测试的首选语言 Pytest:比unittest更强大、更灵活的测试框架,插件多,写法简单 Selenium:Web自动化测试的老大哥,支持多种浏览器,功能强大
这三个加起来,简直就是自动化测试的“黄金组合”!
好了,废话不多说,我们直接进入正题!
Python是我们的基础,必须首先安装。
1. 下载Python
访问Python官网:https://www.python.org/downloads/
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png Python官网下载页面
建议下载Python 3.8及以上版本,我这里以Python 3.9为例。记得要勾选"Add Python to PATH"!
2. 验证安装
安装完成后,打开命令行(Win+R,输入cmd),输入:
python --version如果显示Python版本号,说明安装成功!
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png 验证Python安装
遇到问题怎么办?
如果提示"python不是内部或外部命令",说明环境变量没配置好。手动添加一下:
C:\Python39\
C:\Python39\Scripts\Pytest是我们的测试框架,安装超简单。
1. 使用pip安装
在命令行中输入:
pip install pytest2. 验证安装
安装完成后,输入:
pytest --version会显示pytest的版本信息,这样就OK了!
3. 安装常用插件
为了后面用着更方便,我们可以一次性安装几个常用插件:
pip install pytest-html # 生成HTML报告
pip install pytest-xdist # 分布式测试
pip install pytest-rerunfailures # 失败重试
pip install pytest-ordering # 控制用例执行顺序Selenium是重头戏,用来控制浏览器进行自动化测试。
1. 安装Selenium库
在命令行中输入:
pip install selenium2. 下载浏览器驱动
Selenium需要浏览器驱动才能工作,以Chrome为例:
chrome://version/https://img-blog.csdnimg.cn/direct/1234567890abcdef.png ChromeDriver下载页面
3. 配置浏览器驱动
有三种配置方法,推荐第一种:
方法一:放到Python安装目录下
直接把下载的chromedriver.exe放到Python的Scripts目录下,这样最简单。
方法二:配置环境变量
把chromedriver所在目录添加到系统Path环境变量中。
方法三:代码中指定路径
在代码中指定驱动路径(后面会演示)。
环境装好了,我们来写个简单的测试脚本验证一下。
创建一个名为test_demo.py的文件,输入以下代码:
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
classTestBaidu:
"""百度搜索测试用例"""
defsetup_method(self):
"""每个测试方法前执行"""
# 创建浏览器驱动
self.driver = webdriver.Chrome() # 如果驱动在PATH中,可以直接这样写
self.driver.implicitly_wait(10) # 隐式等待10秒
self.driver.maximize_window() # 最大化窗口
defteardown_method(self):
"""每个测试方法后执行"""
# 关闭浏览器
self.driver.quit()
deftest_baidu_search(self):
"""测试百度搜索功能"""
# 打开百度
self.driver.get("https://www.baidu.com")
# 定位搜索框并输入关键词
search_box = self.driver.find_element(By.ID, "kw")
search_box.send_keys("自动化测试")
# 定位搜索按钮并点击
search_btn = self.driver.find_element(By.ID, "su")
search_btn.click()
# 验证搜索结果
time.sleep(2) # 等待页面加载
assert"自动化测试"in self.driver.title
print("测试通过!")
if __name__ == "__main__":
pytest.main(["-v", "test_demo.py"])保存文件,在命令行中运行:
pytest test_demo.py -v如果看到浏览器自动打开,完成搜索操作然后关闭,并且命令行显示测试通过,恭喜你,环境搭建成功!
https://img-blog.csdnimg.cn/direct/1234567890abcdef.png 测试运行结果
大家在搭建环境时可能会遇到一些问题,这里整理了几个常见的:
问题一:浏览器驱动版本不匹配
现象:报错提示"This version of ChromeDriver only supports Chrome version XX"
解决:确保ChromeDriver版本与Chrome浏览器版本匹配,最好都使用最新版。
问题二:找不到浏览器驱动
现象:报错提示"WebDriver exception: 'chromedriver' executable needs to be in PATH"
解决:
from selenium.webdriver.chrome.service import Service
service = Service(r"C:\path\to\chromedriver.exe")
driver = webdriver.Chrome(service=service)问题三:浏览器被安全策略阻止
现象:浏览器启动时提示"受到自动化软件控制"
解决:添加选项绕过这个提示:
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)基础环境搭好了,我们再配置一些实用的功能。
安装pytest-html后,可以生成漂亮的HTML报告:
pytest test_demo.py --html=report.html安装pytest-xdist后,可以并行运行测试用例,大大提高执行速度:
pytest test_demo.py -n 2 # 使用2个CPU核心安装pytest-rerunfailures后,可以让失败的用例自动重试:
pytest test_demo.py --reruns 2 # 失败重试2次一个良好的项目结构很重要,推荐这样组织你的自动化项目:
project_name/
├── tests/ # 测试用例目录
│ ├── test_login.py # 登录测试
│ ├── test_search.py # 搜索测试
│ └── conftest.py # pytest配置文件
├── pages/ # 页面对象目录
│ ├── login_page.py # 登录页面
│ └── search_page.py # 搜索页面
├── utils/ # 工具类目录
│ ├── driver_manager.py # 浏览器管理
│ └── config_reader.py # 配置读取
├── reports/ # 测试报告目录
├── logs/ # 日志目录
└── requirements.txt # 依赖包列表让我们写一个更完整的例子,使用页面对象模式:
1. 首先创建页面类pages/baidu_page.py:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
classBaiduPage:
def__init__(self, driver):
self.driver = driver
self.wait = WebDriverWait(driver, 10)
defopen_baidu(self):
"""打开百度首页"""
self.driver.get("https://www.baidu.com")
return self
defsearch(self, keyword):
"""执行搜索"""
# 等待搜索框可见
search_box = self.wait.until(
EC.visibility_of_element_located((By.ID, "kw"))
)
search_box.clear()
search_box.send_keys(keyword)
# 点击搜索按钮
search_btn = self.driver.find_element(By.ID, "su")
search_btn.click()
return self
defget_title(self):
"""获取页面标题"""
return self.driver.title2. 然后创建测试用例tests/test_baidu_search.py:
import pytest
from pages.baidu_page import BaiduPage
classTestBaiduSearch:
"""百度搜索测试类"""
@pytest.fixture(autouse=True)
defsetup(self, driver):
"""初始化"""
self.driver = driver
self.baidu_page = BaiduPage(driver)
deftest_search_python(self):
"""测试搜索Python"""
self.baidu_page.open_baidu().search("Python教程")
assert"Python教程"in self.baidu_page.get_title()
deftest_search_automation(self):
"""测试搜索自动化测试"""
self.baidu_page.open_baidu().search("自动化测试")
assert"自动化测试"in self.baidu_page.get_title()3. 创建配置文件tests/conftest.py:
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
@pytest.fixture(scope="session")
defdriver():
"""创建浏览器驱动,整个测试会话只执行一次"""
# 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 创建驱动实例
driver = webdriver.Chrome(options=chrome_options)
driver.implicitly_wait(10)
driver.maximize_window()
yield driver
# 测试结束后关闭浏览器
driver.quit()运行测试:
pytest tests/test_baidu_search.py -v --html=reports/report.html环境搭好了,接下来该怎么学?给大家几点建议:
1. 先掌握基础知识
2. 然后学习进阶内容
3. 实战项目练习
好了,今天的内容就到这里。我们完整地走了一遍Python+Pytest+Selenium环境搭建的过程,包括:
环境搭建是自动化测试的第一步,也是很多新手容易卡住的地方。希望这篇教程能帮你顺利迈出第一步!
如果在搭建过程中遇到什么问题,欢迎在评论区留言,我会尽力帮大家解决!
本文原创于【程序员二黑】公众号,转载请注明出处!
欢迎大家关注笔者的公众号:程序员二黑,专注于软件测试干活分享,全套测试资源可免费分享!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。