• pytest全局变量的使用


    这里重新阐述下PageObject设计模式:

    PageObject设计模式是selenium自动化最成熟,最受欢迎的一种模式,这里用pytest同样适用

    这里直接提供代码:

    全局变量

    conftest.py
    1. """
    2. conftest.py 全局变量,主要实现以下功能:
    3. 1、添加命令行参数broswer, 用于切换不用浏览器
    4. 2、全局参数driver调用
    5. """
    6. import pytest
    7. from selenium import webdriver
    8. def pytest_addoption(parser):
    9. '''
    10. 添加命令行参数 --browser
    11. '''
    12. parser.addoption(
    13. "--browser", action="store", default="firefox", help="browser option: firefox or chrome"
    14. )
    15. @pytest.fixture(scope='session') # 以实现多个.py跨文件使用一个session来完成多个用例
    16. def driver(request):
    17. '''定义全局driver参数'''
    18. name = request.config.getoption("--browser")
    19. if name == "firefox":
    20. driver = webdriver.Firefox()
    21. elif name == "chrome":
    22. driver = webdriver.Chrome()
    23. else:
    24. driver = webdriver.Chrome()
    25. print("正在启动浏览器名称: %s" % name)
    26. # 需要登陆就调用登陆函数
    27. def fn():
    28. print("当全部用例执行完之后: teardown driver!")
    29. driver.quit()
    30. request.addfinalizer(fn)
    31. return driver

    loginpage.py

    1. '''
    2. 作者:Caric_lee
    3. 日期:2018
    4. '''
    5. import time
    6. from autoTest.pytest_selenium.common.basepage import BasePage
    7. from autoTest.pytest_selenium.common.logging import Log
    8. from autoTest.pytest_selenium.page.mysql_python import Mysql
    9. # 获取数据库数据
    10. mysql_test = Mysql('localhost','3306','root','123456','test')
    11. dataAll = mysql_test.query('select * from auto_test')
    12. username = dataAll[0]['username']
    13. password = dataAll[0]['password']
    14. url = dataAll[0]['url']
    15. print("查询数据库信息 账号: %s, 密码: %s, url: %s" % (username, password, url))
    16. class Login(BasePage):
    17. log = Log()
    18. # 断言登录页,提示文本
    19. hint_text_element = ('xpath', "//*[@class='crm-login1-header']/h1")
    20. hint_text = '登录销售易'
    21. # 断言忘记密码
    22. forget_paw_elemet = ('xpath', "//*[text()='忘记密码?']")
    23. forget_paw = '忘记密码'
    24. # 断言免费注册
    25. Free_registration_element = ('xpath', "//*[text()='免费注册']")
    26. Free_registration_text = '免费'
    27. # 断言'欢迎登录销售易'
    28. tenant_interface = ('xpath', "//*[text()='欢迎登录销售易']")
    29. tenant_interface_text = '欢迎登录'
    30. # 元素定位
    31. input_username_element = ('xpath', "//*[@name='loginName']")
    32. input_paw_element = ('xpath', "//*[@placeholder='请输入密码']")
    33. click_enter_element = ('xpath', "//*[text()='登 录']")
    34. clikc_tenant_element = ('xpath', "//span[text()='自动化测试_0202_1109_正式' and @class='crm-company-name']")
    35. def assert_title(self):
    36. result = self.is_text_in_element(self.hint_text_element, self.hint_text)
    37. self.log.info("assert: 断言登录页,提示文本: %s" % result)
    38. def assert_forget_paw(self):
    39. result = self.is_text_in_element(self.forget_paw_elemet, self.forget_paw)
    40. self.log.info("assert: 断言忘记密码: %s" % result)
    41. def assert_Free_registration(self):
    42. result = self.is_text_in_element(self.Free_registration_element, self.Free_registration_text)
    43. self.log.info("assert: 断言免费注册: %s" % result)
    44. def input_username(self, username):
    45. self.send_keys(self.input_username_element, username)
    46. def input_paw(self, paw):
    47. self.send_keys(self.input_paw_element, paw)
    48. def click_enter(self):
    49. self.click(self.click_enter_element)
    50. def assert_tenant_interface(self):
    51. result = self.is_text_in_element(self.tenant_interface, self.tenant_interface_text)
    52. self.log.info("assert: 欢迎登录销售易: %s" % result)
    53. def move_scroll_end(self):
    54. time.sleep(3)
    55. self.js_focus_element(self.clikc_tenant_element) # 这里已经可以实现滚动了
    56. self.log.info("聚焦滚动结束!")
    57. def click_tenant(self): # 选择租户
    58. self.click(self.clikc_tenant_element)
    59. self.log.info("选择租户成功!")
    60. def login(self, username=username, paw=password):
    61. '''登录流程'''
    62. self.assert_title() # 断言登录页,提示文本
    63. self.assert_forget_paw() # 断言忘记密码
    64. self.assert_Free_registration() # 断言免费注册
    65. self.input_username(username)
    66. self.input_paw(paw)
    67. self.click_enter()
    68. time.sleep(3)
    69. self.assert_tenant_interface() # 断言'欢迎登录销售易'
    70. print("---------------------->>>>>>>>>>>>>")
    71. self.move_scroll_end()
    72. self.click_tenant()
    73. if __name__=='__main__':
    74. from selenium import webdriver
    75. driver = webdriver.Chrome()
    76. base = Login(driver)
    77. driver.get(url)
    78. driver.maximize_window()
    79. driver.implicitly_wait(10)
    80. base.login()
    81. # 学习备注!
    82. # 调试某个功能的时候,就只写这个功能点的代码去调
    83. # 加载转圈是js报错了,前端的问题,是bug (滚动条)

    test_login.py

    1. '''
    2. 作者:Caric_lee
    3. 日期:2018
    4. '''
    5. from autoTest.pytest_selenium.page import loginpage
    6. from autoTest.pytest_selenium.page.loginpage import Login
    7. import pytest, time
    8. class Test_login():
    9. url = loginpage.url
    10. username_data = loginpage.username
    11. paw_data = loginpage.password
    12. print("调用信息 账号: %s, 密码: %s, url: %s" % (username_data, paw_data, url))
    13. @pytest.fixture(scope="function", autouse=True) # function 默认参数传递,autouse=True 自动调用fixture功能
    14. def test_01(self, driver):
    15. driver.get(self.url)
    16. driver.maximize_window()
    17. driver.implicitly_wait(10)
    18. self.login = Login(driver)
    19. def test_02(self):
    20. '''登录'''
    21. # 1、断言登录页,提示文本
    22. self.login.assert_title()
    23. # 2、断言忘记密码
    24. self.login.assert_forget_paw()
    25. # 3、断言免费注册
    26. self.login.assert_Free_registration()
    27. # 4、输入账号
    28. self.login.input_username(self.username_data)
    29. # 5、输入密码
    30. self.login.input_paw(self.paw_data)
    31. # 6、点击登录
    32. self.login.click_enter()
    33. time.sleep(3)
    34. # 7、断言'欢迎登录销售易'
    35. self.login.assert_tenant_interface()
    36. # 8、滚动到底部
    37. self.login.move_scroll_end()
    38. # 9、点击租户
    39. self.login.click_tenant()
    40. time.sleep(5)
    41. def test_03(self, driver):
    42. time.sleep(5)
    43. driver.quit()
    44. if __name__ == '__main__':
    45. # 选择测试浏览器
    46. pytest.main(["-s", "--browser=chrome", "test_login.py"])

    这里直接指向test_login.py文件就OK了,

    还可以在优化,把loginpage中的读取数据库信息,单独写个方法,放在page里面,直接读取。

    数据结构还需要在调整

    这可能是B站最详细的pytest自动化测试框架教程,整整100小时,全程实战!!!

  • 相关阅读:
    入门C++程序员需要怎么下手?
    计算机网络4——网络层2
    网络安全事件应急响应实战
    二分查找算法
    使用自功率谱、互功率谱估计滤波器幅频特性
    TCP/IP基础
    基于Matlab实现评价型模型求解方法(附上源码+数据)
    【疑问&解决】访问CSDN文章的3种方式(自定义域名) | 关于网址的后缀:spm=1001.2014.3001.5501 | .m3u8文件、HLS协议? | 文心一言2023--7月15~16测试
    Netty源码分析之NIO
    C语言-杨辉三角的三种解法-简单易懂篇
  • 原文地址:https://blog.csdn.net/mashang123123123/article/details/134277303