【UI自动化测试】2_PO模式 _单元测试框架(重点) 📅 发布时间:2026/7/11 13:39:09 👁️ 浏览次数: 文章目录一、单元测试框架二、pytest组织测试用例2.1 test_login.py2.2 test_address.py三、pycharm中测试框架选择一、单元测试框架pytest(组织测试用例、方便生成测试报告、自动断言)python:unittest java:junit、testNg二、pytest组织测试用例 1、一个测试类对标手工测试用例的一个测试点测试点有正反向) 2、每个具体用例标题对标手工用例中一个用例标题 3、类级别的初始化方法setup_class在整个测试类运行之前会运行一次 4、类级别的销毁的方法teardown_class在整个测试类运行完之后运行一次 5、函数级别的初始化方法setup在每个测试方法运行之前都会运行一次 引入pytest的好处-方便组织、 管理多个测试用例-提供了丰富的断言方法-方便生成测试报告-减少了代码冗余 存在的问题-代码冗余-业务脚本与页面对象没有分开 常见问题-测试方法就是测试标题对应的输入的测试数据一定要对应-运行测试用例如选择单个测试方法运行则只会运行一条-运行时不是用的pytest单元测试框架运行运行连浏览器都不会打开--第一:删除pycharm历史运行记录--第二:修改pycharm默认运行测试工具 version_02 包-__init__.py-test_login.py#一个登录测试多种场景写在一个测试文件当中文件以test开头-test_address.py# 测试新增地址2.1 test_login.py# 导包fromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriverimportActionChainsfromselenium.webdriver.common.byimportBy# 1、定义测试类 ---模块登录模块classTestLogin():# 开始执行测试之前只会打开一次浏览器defsetup_class(self):# 加self的意义定义实例属性或者类属性里面的实例方法或者类方法都可以访问# self表示当前类属性self.driverwebdriver.Chrome()# 后面访问驱动对象使用self.driver访问self.driver.maximize_window()self.driver.implicitly_wait(10)# 所有的测试用例都运行完毕才会关闭浏览器defteardown_class(self):sleep(2)self.driver.quit()# 每个测试方法的起点一致那么证明每个测试方法运行之前都会回到首页defsetup(self):self.driver.get(https://hmshop-test.itheima.net/)# 2、定义测试方法 --- 标题# 登录失败-账户不存在deftest_login_account_not_exist(self):# 4、暂停3s -代替测试步骤# a。使用Xpath 文本定位策略定位登录超链接并点击self.driver.find_element_by_xpath(//*[text()登录]).click()# b。使用Xpath 属性定位策略定位用户名输入框并输入13600001111self.driver.find_element_by_xpath(//*[idusername]).send_keys(13611111111)# c。使用Xpath 属性包含定位策略定位密码输入框并输入123456self.driver.find_element_by_xpath(//*[contains(id,pass)]).send_keys(123456)# d。使用Xpath 属性与逻辑结合策略定位验证码输入框并输入8888self.driver.find_element_by_xpath(//*[placeholder验证码 and idverify_code]).send_keys(8888)# e。使用Xpath 层级与属性结合策略定位登录按钮并点击self.driver.find_element_by_xpath(//*[classlogin_bnt]/a).click()sleep(2)# 获取实际结果msgself.driver.find_element(By.CSS_SELECTOR,.layui-layer-content).textprint(msg:,msg)# 判断实际结果和预期结果是否一致assertmsg账号不存在!# 登录失败-密码错误deftest_login_password_error(self):# 4、暂停3s -代替测试步骤# a。使用Xpath 文本定位策略定位登录超链接并点击self.driver.find_element_by_xpath(//*[text()登录]).click()# b。使用Xpath 属性定位策略定位用户名输入框并输入13600001111self.driver.find_element_by_xpath(//*[idusername]).send_keys(13600001111)# c。使用Xpath 属性包含定位策略定位密码输入框并输入123456self.driver.find_element_by_xpath(//*[contains(id,pass)]).send_keys(error)# d。使用Xpath 属性与逻辑结合策略定位验证码输入框并输入8888self.driver.find_element_by_xpath(//*[placeholder验证码 and idverify_code]).send_keys(8888)# e。使用Xpath 层级与属性结合策略定位登录按钮并点击self.driver.find_element_by_xpath(//*[classlogin_bnt]/a).click()sleep(2)# 获取实际结果msgself.driver.find_element(By.CSS_SELECTOR,.layui-layer-content).textprint(msg:,msg)# 断言期望的提示信息包含在实际结果中assert密码错误inmsg2.2 test_address.py# 导包importtimefromtimeimportsleepfromseleniumimportwebdriverfromselenium.webdriverimportActionChainsfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.selectimportSelectfromselenium.webdriver.support.waitimportWebDriverWaitclassTestAddress:# 开始执行测试之前只会打开一次浏览器defsetup_class(self):# 加self的意义定义实例属性或者类属性里面的实例方法或者类方法都可以访问# self表示当前类属性self.driverwebdriver.Chrome()# 后面访问驱动对象使用self.driver访问self.driver.maximize_window()self.driver.implicitly_wait(10)self.driver.get(https://hmshop-test.itheima.net/)# 所有的测试用例都运行完毕才会关闭浏览器defteardown_class(self):sleep(2)self.driver.quit()deftest_01_login_suc(self):# a。使用Xpath 文本定位策略定位登录超链接并点击self.driver.find_element_by_xpath(//*[text()登录]).click()# b。使用Xpath 属性定位策略定位用户名输入框并输入13600001111self.driver.find_element_by_xpath(//*[idusername]).send_keys(13600001111)# c。使用Xpath 属性包含定位策略定位密码输入框并输入123456self.driver.find_element_by_xpath(//*[contains(id,pass)]).send_keys(123456)# d。使用Xpath 属性与逻辑结合策略定位验证码输入框并输入8888self.driver.find_element_by_xpath(//*[placeholder验证码 and idverify_code]).send_keys(8888)# e。使用Xpath 层级与属性结合策略定位登录按钮并点击self.driver.find_element_by_xpath(//*[classlogin_bnt]/a).click()sleep(2)deftest_02_add_address(self):# 2、在个人中心页面点击【账户设置】下【收货地址】ActionChains(self.driver).move_to_element(self.driver.find_element(By.XPATH,//*[text()账户设置])).perform()self.driver.find_element(By.XPATH,//*[text()收货地址]).click() # *获取当前已经保存地址条数 old_num self.driver.find_elements(By.CSS_SELECTOR, em.red)[0].text print(f新增地址前已保存的地址条数为{old_num}) # 3、点击【新增地址】收货人信息 cus{当前时间}self.driver.find_element(By.XPATH,//*[text()增加新地址]).click()customer_namefcus{time.strftime(%H_%M_%S)}# 4、完成新增地址操作self.driver.find_element(By.CSS_SELECTOR,[nameconsignee]).send_keys(customer_name)self.driver.find_element(By.CSS_SELECTOR,[namemobile]).send_keys(13600001112)Select(self.driver.find_element(By.ID,province)).select_by_value(1)# value属性值为1代表北京Select(self.driver.find_element(By.ID,city)).select_by_value(2)# 市辖区2Select(self.driver.find_element(By.ID,district)).select_by_value(39)# 朝阳区39Select(self.driver.find_element(By.ID,twon)).select_by_value(40)# 建外街道40self.driver.find_element(By.CSS_SELECTOR,[nameaddress]).send_keys(幸福门街道26栋)self.driver.find_element(By.CSS_SELECTOR,[namezipcode]).send_keys(100000)self.driver.find_element(By.ID,address_submit).click()# 当UI自动化脚本操作功能时如该步骤会自动触发发送请求最好在触发之后跟上强制等待1秒防止发送请求失败sleep(1) # 5、控制滚动条移动到页面最底部 js_str window.scrollTo(0,2000) self.driver.execute_script(js_str) sleep(2) # 6、刷新下界面 self.driver.refresh() # (*再次获取当前已经保存地址条数 new_num self.driver.find_elements(By.CSS_SELECTOR, em.red)[0].text print(f新增地址前已保存的地址条数为{new_num}) # (*判断新增完后的地址条数是否1 如果1则打印新增成功否则打印新增失败 if int(new_num) -1 int(old_num): print(新增成功) else: print(新增失败) # 根据本次新增的【收货人】信息的文本到界面上找元素如果能找到则代表信息成功找不到则失败截图try:# 显示等待# 如果找到元素对象则把元素对象赋值给is_suc变量is_sucWebDriverWait(self.driver,10,1).until(lambdax:x.find_element(By.XPATH,f//*[text(){customer_name}]))exceptExceptionase:# 找不到则给is_suc变量赋值为Falseis_sucFalse# 截图self.driver.get_screenshot_as_file(新增地址失败.png)assertis_suc三、pycharm中测试框架选择File——Settings——Tools——Python Integrated Tools——Testing: Default test runner——下拉框选择测试框架
Copilot进阶教程:在AI原生应用中实现智能开发工作流 Copilot进阶教程:在AI原生应用中实现智能开发工作流关键词:GitHub Copilot、AI原生应用、智能开发工作流、代码生成、开发效率优化摘要:在AI技术深度渗透软件开发的今天,“AI原生应用”(AI-Native Application… 2026/7/10 1:46:19
CST仿真:探索涡旋与聚焦的奇妙世界 CST仿真 涡旋与聚焦在电磁学和光学领域,涡旋与聚焦现象一直是研究的热点。CST(Computer Simulation Technology)软件作为一款强大的电磁仿真工具,为我们深入探究这些现象提供了有力的手段。今天,咱们就来唠唠如何利用C… 2026/7/10 14:42:16
SaaS架构下AI原生应用的最佳实践与案例分析 SaaS架构下AI原生应用的最佳实践与案例分析 关键词:SaaS架构、AI原生应用、数据飞轮、模型即服务(MaaS)、云原生、案例分析、最佳实践 摘要:本文从SaaS(软件即服务)与AI(人工智能)融合的行业趋势出发,结合“AI原生应用”的核心定义,通过生活类比、技术原理解析、代码… 2026/7/7 22:34:39
WuWa-Mod:15个实用模组彻底改变你的《鸣潮》游戏体验 WuWa-Mod:15个实用模组彻底改变你的《鸣潮》游戏体验 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod 还在为《鸣潮》中重复的收集任务和战斗限制感到烦恼吗?WuWa-Mod模组为你带… 2026/7/11 13:39:02
AtlasOS终极指南:三步打造高性能Windows系统的完整教程 AtlasOS终极指南:三步打造高性能Windows系统的完整教程 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trending/atl… 2026/7/11 13:35:01
ScreenshotFramer实战指南:与Fastlane Snapshot无缝集成的10个技巧 ScreenshotFramer实战指南:与Fastlane Snapshot无缝集成的10个技巧 【免费下载链接】ScreenshotFramer Create localized App Store screenshots 项目地址: https://gitcode.com/gh_mirrors/sc/ScreenshotFramer ScreenshotFramer是一款专为iOS开发者设计的强… 2026/7/11 13:30:58
Harness AI工程化:从代码补全到自主开发的范式转变 如果你还在用传统的代码补全工具,可能已经落后了至少一个时代。当大多数开发者还在纠结"要不要给AI更多权限"时,前沿的工程团队已经在用Harness Engineering理念,让AI Agent自主完成从需求分析到测试部署的全流程开发。最近6小时深… 2026/7/11 13:30:58
applera1n终极指南:三步完成iOS 15-16激活锁绕过 applera1n终极指南:三步完成iOS 15-16激活锁绕过 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 还在为二手iPhone的激活锁而烦恼吗?忘记了旧设备的Apple ID密码?ap… 2026/7/11 13:28:57
别靠增加 HR 人手缓解社招压力,流程数字化才是提效核心路径 社招效率低,根本原因不是人手不够,而是流程设计本身就在制造浪费。社会招聘(社招)区别于校招的核心在于:候选人质量参差不齐、渠道分散、决策链条长,每一个环节的摩擦都会以指数级方式放大招聘周期。要系统… 2026/7/11 13:24:56
5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符] 5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载… 2026/7/11 0:00:11
工业信号干扰处理与FOD4216光耦应用实战 1. 工业环境中的信号干扰挑战在工业自动化领域,信号采集的准确性直接关系到整个控制系统的可靠性。典型的工业现场充斥着各种干扰源:大功率电机启停产生的电磁干扰、变频器工作产生的高频噪声、继电器触点火花放电,以及长距离传输引入的共模干… 2026/7/11 0:00:11
OpenHarmony 完整项目工程整合规范 + 模块化分层架构(API23+ 标准企业级结构) 摘要前面系列教程覆盖了 ArkUI 组件、路由、生命周期、本地存储、网络请求、Ability 底层全套基础能力,本篇统一梳理标准工程目录分层、模块化拆分、代码复用规范、全局工具统一管理、项目打包权限配置、常见工程报错统一解决方案,形成可直接用于课程设计… 2026/7/11 0:00:11
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/11 12:30:52
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08