ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

docker-python-chromedriver 自带 test_script.py 深度解析:Selenium unittest 测试模板实战教学

docker-python-chromedriver 自带 test_script.py 深度解析:Selenium unittest 测试模板实战教学 docker-python-chromedriver 自带 test_script.py 深度解析Selenium unittest 测试模板实战教学【免费下载链接】docker-python-chromedriverDockerfile for running Python Selenium in headless Chrome (Python 2.7 / 3.6 / 3.7 / 3.8 / Alpine based Python / Chromedriver / Selenium / Xvfb included in different versions)项目地址: https://gitcode.com/gh_mirrors/do/docker-python-chromedriverdocker-python-chromedriver 是专为「Python Selenium 无头浏览器自动化测试」打造的 Docker 镜像项目镜像内置 Google Chrome 与 Chromedriver仓库还随附了一份开箱即用的 test_script.py 示例脚本。这篇 docker-python-chromedriver 深度解析教程将带你逐行看懂这份 Selenium unittest 测试模板掌握如何在无头 Chrome 环境中快速编写、运行自己的浏览器自动化测试零基础也能上手。test_script.py 是什么一份开箱即用的 Selenium unittest 测试模板在开始拆解之前先弄清楚一个概念unittest是 Python 标准库自带的单元测试框架而 Selenium 则是驱动真实浏览器的自动化工具。把两者结合就得到了「浏览器端到端自动化测试」的标准姿势。仓库根目录下的 test_script.py 正是这样一份最小可运行的测试模板它只有 47 行代码却完整示范了 Selenium unittest 测试的四个核心要素——环境准备setUp、测试执行test_case、环境清理tearDown和入口加载main。对新手来说它就是最好的「抄作业」范本。为什么用 docker-python-chromedriver 跑 Selenium 测试自己安装 Chrome、再手动匹配 Chromedriver 版本是无数新手崩溃的起点 。docker-python-chromedriver 的价值在于镜像里已经把 Python、Chrome、Chromedriver部分版本还预装 Selenium全部打包好你只需要一条 Docker 命令就能获得一个「测试环境即服务」的容器。项目按场景提供了三大类镜像选择非常灵活镜像系列特点典型版本Debian 系兼容性好资料最多py-debian 下的 3.6 ~ 3.11Alpine 系体积小启动快py-alpine 下的 3.6-alpine ~ 3.11-alpine预装 Selenium 版省去 pip install 步骤各版本对应的-selenium后缀镜像所有 Dockerfile 都由 Dockerfile.template 模板配合 render.sh 批量生成想要理解镜像构造看模板比看单个 Dockerfile 更高效。test_script.py 核心代码逐行拆解Selenium unittest 测试模板实战接下来是本文的重头戏。我们把 test_script.py 拆成四个部分分别对应 unittest 测试的生命周期。第一步setUp——用五个参数搞定无头 Chrome 启动测试类TestTemplate继承自unittest.TestCase其中setUp方法负责在每条测试用例执行前初始化浏览器chrome_options webdriver.ChromeOptions() chrome_options.add_argument(--no-sandbox) chrome_options.add_argument(--headless) chrome_options.add_argument(--disable-gpu) chrome_options.add_argument(--disable-dev-shm-usage) chrome_options.add_argument(--window-size1920,1080) self.driver webdriver.Chrome(optionschrome_options) self.driver.implicitly_wait(10)这五个参数是容器环境跑 Selenium 的「保命符」逐个解释--headless无头模式浏览器不弹窗也能运行这是自动化的核心--no-sandbox容器内默认以 root 运行不关沙箱 Chrome 直接拒绝启动--disable-dev-shm-usage容器共享内存/dev/shm默认只有 64MB不关掉它浏览器极易崩溃--disable-gpu无头环境没有 GPU禁用避免报错--window-size1920,1080固定窗口尺寸防止页面元素因视口过小而定位失败。最后一行implicitly_wait(10)是隐式等待页面元素还没加载出来时最多等 10 秒是解决「元素找不到」类随机报错的利器。第二步test_case——定位元素并触发点击test_case_1与test_case_2展示了最基础的页面操作流程访问网址 → 定位元素 → 执行点击。self.driver.get(https://www.oursky.com/) el self.driver.find_element(By.CLASS_NAME, header__logo) el.click()这里用By.CLASS_NAME按 CSS 类名定位元素Selenium 还支持 ID、XPath、CSS 选择器等定位方式。值得学习的是它的异常处理写法捕获NoSuchElementException后调用self.fail()让测试明确失败而不是静默崩溃这比裸奔的find_element专业得多。第三步tearDown——每次测试后的环境清理def tearDown(self): self.driver.quit()看似只有一行但意义重大无论测试通过还是失败tearDown都会执行保证浏览器进程被彻底关闭避免容器内残留大量僵尸 Chrome 进程拖垮环境。写自己的测试时这一步千万不要省略。第四步入口加载——main 里藏着的小巧思if __name__ __main__: suite unittest.TestLoader().loadTestsFromTestCase(TestTemplate) unittest.TextTestRunner(verbosity2).run(suite)这两行等价于一句unittest.main()但更灵活先用TestLoader把测试类加载成测试套件再用TextTestRunner以verbosity2详细模式运行最终输出会逐条打印每个用例名和结果。最快运行方法Docker 容器内一键执行 test_script.py下面演示从零到跑通的最短路径。首先获取项目仓库git clone https://gitcode.com/gh_mirrors/do/docker-python-chromedriver cd docker-python-chromedriver然后启动一个挂载了当前目录的容器docker run -it -w /usr/workspace -v $(pwd):/usr/workspace joyzoursky/python-chromedriver:latest bash进入容器后如果你用的是-selenium版本镜像直接运行即可python test_script.py如果用的是不带 selenium 的镜像先补一句pip install selenium再运行。跑完后你会看到类似这样的输出test_case_1 (__main__.TestTemplate) Find and click top-left logo button ... ok test_case_2 (__main__.TestTemplate) Find and click top-right Start your project button ... ok Ran 2 tests in 11.852s OK两条用例全部通过说明你的 Selenium 无头环境已经搭建成功 ✅。Debian 系镜像进入后是 bashAlpine 系镜像则用sh。把模板改成你自己的测试Selenium unittest 改造三步法看懂模板只是第一步把它改造成自己的测试才是真正实战。按这三步走十分钟就能产出第一份自定义测试改网址与定位器把get()里的 URL 换成目标站点把By.CLASS_NAME换成实际元素的定位方式加断言点击之后用self.assertTrue(...)或self.assertEqual(...)验证页面跳转、元素出现等预期结果这是测试和「脚本」的本质区别复制用例想测多个页面场景就复制test_case_1的骨架改成test_case_3、test_case_4……unittest 会自动发现并执行所有以test_开头的方法。模板中setUp的浏览器配置是通用的换任何项目都可以原样保留这就是「模板」二字的含金量。新手最容易踩的坑与避坑建议结合项目多年维护沉淀下来的经验这几个坑几乎人人都会遇到忘加 --no-sandbox 导致浏览器启动失败容器内 root 用户必须带这个参数这是模板里存在它的原因忘记处理共享内存不加--disable-dev-shm-usage测试跑到一半 Chrome 会神秘崩溃报错却语焉不详Chromedriver 版本不匹配本地自己搭环境时最常见的坑这也是推荐直接用 Docker 镜像的原因——版本问题已被镜像层解决页面加载慢导致元素找不到优先依赖implicitly_wait的隐式等待必要时再上显式等待WebDriverWait。另外注意镜像目前主要支持 amd64 架构Apple M 系列等 arm64 机器上可能遇到兼容问题动手前先确认自己的 CPU 架构。总结通过这份 docker-python-chromedriver 自带 test_script.py 的深度解析你应该已经掌握了 Selenium unittest 测试模板的完整骨架setUp 负责环境、test_case 负责业务、tearDown 负责清理、入口负责调度。把这 47 行代码吃透配合 Docker 镜像开箱即用的无头 Chrome 环境你完全可以在此基础上快速构建属于自己的浏览器自动化测试体系。从今天开始用模板「抄作业」用实践「写作业」你的第一条 Selenium 自动化测试就差一个docker run了 。【免费下载链接】docker-python-chromedriverDockerfile for running Python Selenium in headless Chrome (Python 2.7 / 3.6 / 3.7 / 3.8 / Alpine based Python / Chromedriver / Selenium / Xvfb included in different versions)项目地址: https://gitcode.com/gh_mirrors/do/docker-python-chromedriver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表