Selenium 自动化测试实战
郭宏志
享学志成科技创始人兼 CEO
18891 人已学习
新⼈⾸单¥68
课程目录
已完结/共 69 讲
Selenium 自动化测试实战
登录|注册
留言
20
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 47 | 使用pytest重构项目:实现用例依赖、测试报告、数据参数化
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | 聊聊Web自动化测试:黑盒、白盒、α测试、β测试、冒烟测试、回归测试
04 | Selenium三剑客:WebDriver、IDE、Grid一网打尽
05 | Selenium开发环境搭建
06 | 下载安装浏览器驱动:教你解决最麻烦的版本匹配问题
07 | 第一个Selenium测试:Selenium测试流程、源码分析
08 | 实现元素定位:掌握Selenium八大定位方法
09 | 通过打车生活案例,深入剖析WebDriver运行原理
10 | 掌握WebDriver核心方法和属性的使用
11 | 掌握WebElement核心方法和属性的使用
12 | form表单:熟练掌握form表单操作步骤
13 | 掌握checkbox和radiobutton的定位技巧
14 | 下拉列表:熟练使用Select类,来实现下拉列表定位
15 | 弹框处理:掌握alert、confirm、prompt三种弹出的用法
16 | Selenium三种等待方式:剖析原理、用法和应用场景
17 | Selenium等待条件:掌握17种元素等待条件
18 | 掌握鼠标单击、双击、右击,键盘输入、键盘组合键的应用
19 | 熟练执行JavaScript的方法和技巧,掌握JavaScript操作滚动条
20 | Selenium屏幕截图:实现屏幕截屏、按照日期时间格式保存图片
21 | 掌握frame、iframe定位,熟练frame的切入和切出
22 | 下载安装Selenium IDE:下载安装Chrome、Firefox插件IDE
23 | 熟练Selenium IDE菜单栏、工具类、命令窗口的使用
24 | Selenium IDE实现录制和回放及脚本导出
25 | 项目环境搭建:安装JDK、MySQL、Tomcat和测试系统
26 | 需求分析和用例设计:深度挖掘需求,掌握测试用例设计范式
27 | 项目架构设计:掌握分层设计思想,合理设计目录和包结构
28 | 解决验证码问题-方案一:使用pytesseract和Pillow实现验证码识别
29 | 解决验证码问题-方案二:通过第三方AI库识别验证码
30 | 实现工具类:设计获得验证码、随机字符串生成、cookie操作工具类
31 | 完成用户注册测试用例:解决验证码、等待弹框等复杂内容
32 | 完成用户登录测试用例:实现登录成功和失败测试
33 | 完成管理员登录测试用例:完成验证码正确和错误测试用例
34 | 完成文章分类测试用例:解决测试用例依赖问题
35 | 完成添加、删除文章测试用例
36 | unittest简介:测试用例、测试套件、测试运行器、测试加载器
37 | unittest中的方法:掌握各种setup、teardown和断言方法
38 | 测试用例、测试套件和测试加载器:掌握加载测试用例的四种方法
39 | 使用unittest重构测试用例:掌握使用unittest模块的方法和技巧
40 | 为项目添加测试报告:使用第三方模块实现测试报告
41 | pytest框架简介:pytest安装、用例编写规则、执行用例
42 | pytest标记:查找测试策略、标记测试函数
43 | pytest参数化处理:使用参数化装饰器、解析列表、元组、字典等数据
44 | pytest Fixture:使用fixture实现用例之间的调用
45 | pytest setup 和 teardown
46 | pytest allure生成测试报告
47 | 使用pytest重构项目:实现用例依赖、测试报告、数据参数化
48 | logging模块简介:日志的作用、等级和常用函数
49 | logging日志格式输出:日志发生的时间、文件、模块、行号等信息格式输出
50 | logging模块四大组件:Logger、Handler、Formatter、Filter的用法
51 | 为项目添加日志:将日志应用到项目
52 | 使用csv模块读取CSV文件,使用pytest参数化实现DDT
53 | 使用json模块读取json文件,使用pytest参数化实现DDT
54 | 使用xlrd模块读取excel文件,使用pytest参数化实现DDT
55 | Selenium读取数据库数据:将数据保存到数据库,实现数据驱动的测试
56 | Selenium DDT:使用DDT模块实现数据驱动的测试
57 | 使用DDT思想重构项目:使用数据库保存数据,将数据驱动思想应用到项目
58 | POM设计模式简介:理解页面-对象-模型设计模式,实现代码的松耦合
59 | 设计BasePage类:设计基类,提高项目的代码重用性
60 | 设计项目页面对应的PO类:使用POM设计模式设计PO类
61 | 设计项目测试用例:将POM设计模式应用到项目
62 | Selenium Grid下载安装:配置Java运行环境,下载安装Selenium Grid
63 | Selenium注册node节点
64 | 使用Selenium执行远程测试
65 | Jenkins环境搭建:下载安装Jenkins
66 | 在Jenkins中运行项目
67 | 邮件通知:实现邮件通知功能
68 | 定时运行项目,实现真正的自动化测试
69 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(20)

  • 最新
  • 精选
白扬
老师我的@purest. mark后面没有dependency是神魔原因啊?

作者回复: 看看是不是拼写错了

2021-04-01
3
1
Geek_62d57f
求老师解答,百度都找不到答案,和下面同学一样的问题 ##依赖的是登陆成功的用例,但是跑的时候,我admin_login中的不管是登陆成功还是失败的用例都跑了一遍之后,才跑文章分类的用例呢?

作者回复: 老师,你好。 业务层用例的setup_class函数中初始化了Admin Login Page对象,为什么会执行它对应模块下的用例呢? 这一点想不通,希望老师能看到并解答,十分感谢。

2023-02-16
庄颖
老师, 查阅了一些资料,说是scope参数还有session、package、module、class几种级别,其中module是从同一模块内查询依赖,案例里跨模块使用,为什么是使用module而不是package呢?

作者回复: 在 Pytest 中,可以使用不同的作用域来控制测试用例和夹具的生命周期。以下是 Pytest 支持的作用域: function: 每个测试用例和夹具都会被调用一次。 class: 每个测试类在运行测试用例之前都会被调用一次。每个测试类可以包含多个测试用例。 module: 每个测试模块在运行测试用例之前都会被调用一次。测试模块是指包含测试用例的 Python 模块。 session: 在整个测试会话期间,只会调用一次。测试会话是指执行所有测试用例的完整过程。 这些作用域的区别在于它们控制测试用例和夹具的生命周期。例如,如果将作用域设置为 "function",则每次运行测试用例时,都会创建新的夹具实例。如果将作用域设置为 "module",则测试用例和夹具在整个测试模块期间保持不变。 另外需要注意的是,如果在一个作用域中定义了一个夹具,它仍然可以在比它作用域更低的级别中使用。例如,如果在 "module" 作用域中定义了一个夹具,它仍然可以在 "function" 作用域中使用。但是,如果在一个作用域中定义了一个夹具,它不能在比它更高的级别中使用。例如,在 "function" 作用域中定义的夹具不能在 "module" 作用域中使用。

2022-11-27
3
忧伤的胡萝卜
老师,请问如果B依赖了一个参数化的函数A,怎么让A每执行一次,就执行一次B,而不是A执行完所有参数后执行一次B呢?

作者回复: 在 Pytest 中,如果一个测试函数 B 依赖于另外一个参数化的测试函数 A,且需要在每次执行 A 函数时都执行一次 B 函数,可以使用 Pytest 的 Fixture 模块来实现。 具体而言,可以定义一个 Fixture 函数,使用 `yield` 语句返回一个可迭代对象,每次迭代都执行 B 函数。然后在 A 函数中调用 Fixture 函数即可。示例如下: ``` import pytest @pytest.fixture(scope="function") def run_b(): # Fixture 函数,每次迭代都执行 B 函数 def _run_b(): print("B function is running...") yield _run_b @pytest.mark.parametrize("arg", [1, 2, 3]) def test_a(run_b, arg): # A 函数,每次迭代都调用 Fixture 函数 print("A function is running with arg:", arg) run_b() # 调用 Fixture 函数,每次迭代都执行 B 函数 ``` 在以上代码中,Fixture 函数 `run_b()` 每次迭代都会执行一次 B 函数。然后在参数化的测试函数 A 中,每次迭代都调用 Fixture 函数 `run_b()`,即可实现每次迭代都执行一次 B 函数的需求。 需要注意的是,为了确保 Fixture 函数在 A 函数之前执行,需要在 A 函数中添加 Fixture 函数名作为参数。此外,还需要将 Fixture 函数的作用域设置为 `function`,表示每个测试函数执行时都会执行 Fixture 函数。

2022-04-14
2
Jone XH
老师你好,我有2条用例,为什么控制台显示我就运行了一条?

作者回复: 把源码贴出来看看

2022-03-26
Enigma
求老师解答,百度都找不到答案,和下面同学一样的问题 ##依赖的是登陆成功的用例,但是跑的时候,我admin_login中的不管是登陆成功还是失败的用例都跑了一遍之后,才跑文章分类的用例呢? 被依赖的标签:@pytest.mark.dependency(name='admin_login') 依赖的标签:@pytest.mark.dependency(depends=["admin_login"], scope="module")

作者回复: 在pytest中,标记依赖关系的方式确保了被依赖用例执行成功后,才会执行依赖用例。如果依赖用例的执行依赖于被依赖用例的状态,则可能存在以下情况: 被依赖用例未成功执行,导致依赖用例被跳过 依赖用例定义的范围scope不正确 您可以检查一下以下几个方面,看是否会影响用例执行顺序: 确保被依赖的登录测试用例的标记名称和依赖测试用例中的名称一致。如果不一致,则依赖用例无法找到被依赖用例,也就不会执行。 确保被依赖用例执行成功,没有抛出任何异常。如果被依赖用例执行失败,依赖用例会被跳过。 确保依赖用例的scope正确设置。scope的默认值为function,表示该用例是在每个测试函数之前执行的。如果依赖用例的scope设置为module,则会在依赖用例所在的模块之前执行。如果被依赖用例在依赖用例所在的模块之后定义,则依赖用例无法找到被依赖用例,也就无法执行。 另外,您也可以尝试使用--verbose选项运行pytest,查看pytest的详细输出,看是否有任何提示。

2022-03-03
3
Geek_d0cbdb
添加依赖后,我的用例直接被跳过执行了: testcases/pytest/test_category.py::TestCategory::test_add_category_error SKIPPED (test_add_category_error depends on admin_login) testcases/pytest/test_category.py::TestCategory::test_add_category_ok SKIPPED (test_add_category_ok depends on admin_login) testcases/pytest/test_category.py::TestAdminLogin::test_admin_login_code_ok PASSED

作者回复: 这里有一篇博客可以解释你的问题:https://www.cnblogs.com/Tester_Dolores/p/13931537.html

2021-08-21
2
Geek_d0cbdb
B依赖A,执行文件B的时候,被依赖的A执行了,但是B中的方法都skip了,我代码里面没问题,我把老师的代码copy到自己的目录下,也是同样有依赖的会直接skip,但是我直接运行老师的项目的时候却能成功,是不是项目中有什么配置落下了

作者回复: 这里有一篇博客可以解释你的问题:https://www.cnblogs.com/Tester_Dolores/p/13931537.html

2021-08-20
王潼
老师,我的2个.py文件都在一个包里面,写的也和你一样,但是就是不执行依赖的那个方法,没有报错,也没有跳过,就是只执行了被依赖的那个文件的内容,就是不执行依赖的那个test_product 登录文件: @pytest.mark.dependency(name='login_group') def test_group(self): # 进入项目租户 WebDriverWait(self.driver, 30, 0.2).until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[2]/div[2]/div[4]"))) self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[4]').click() 依赖的文件: class Safety(object): def setup_class(self): self.login = TestLogin() @pytest.mark.dependency(depends=["login_group"], scope="module") def test_product(self): # 进入安全检查产品 WebDriverWait(self.login.driver, 30, 0.2).until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[1]/div[2]/div/div/div/div[2]/div[2]/div"))) self.login.driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/div[2]/div').click() def runTest(self): self.test_product() if __name__ == '__main__': pytest.main(['test_safety.py'])

作者回复: 设置断点看看怎么执行的

2021-08-10
3
有梦想就会sou
老师,我生成的 allure 报告页面是空白的,请问要怎么解决呢?

作者回复: 看看安装是否正确 设置断点调试一下

2021-07-15
收起评论