gpt4 book ai didi

python - 需要有关测试类结构的建议(Python、Selenium)

转载 作者:行者123 更新时间:2023-11-28 21:16:25 24 4
gpt4 key购买 nike

我目前正在开发 QA 测试系统,我正在使用 Python 和 Selenium。我目前的项目结构是这样的:

locators.py - 包含页面上的所有定位器

例子:

  class LoginPageLocators(object):
""" Login Page Locators """

USERNAME = (By.ID, 'username') #username text-box
....

basePage.py - 基页类

例子:
class Page(object):

def __init__(self, driver, base_url):

self.base_url = base_url
self.driver = driver
self.timeout = 30

def find_element(self, *locator):
"""
This method finds an element on the page with the appropriate locator

:param locator:
:return: element on page:
"""

return self.driver.find_element(*locator)

pages.py - 这里有我所有的页面类,这是一个小例子:

例子:

类登录页面(页面):
""""登录页面类"""
def __init__(self, driver):
self.locator = LoginPageLocators
super().__init__(driver)

def enter_username(self, user):
"""
This function enters the username of the user about to log in

:param user:
:return: fills the username textbox:
"""

self.find_element(*self.locator.USERNAME).send_keys(users.users.get_user(user)["username"])

还有一个users.py文件,不过这个就不用展示了。我希望你能得到我在我的代码中实现的结构。

现在进行我的实际任务/测试。我需要实现一个简单的场景:
  • 用户1登录失败
  • 用户 2 以管理员身份登录并授予用户 1 登录权限
  • 用户1登录成功
  • 用户 2 再次登录并删除用户 1,因此可以重复测试,并且
    登出

  • 这是我目前的实现,效果很好,但出于某种原因我对此不满意。这是代码:
    例子:
           """" This module contains the actual tests """

    # skipping imports ...


    class PageTests(unittest.TestCase):

    # efficient set up
    @classmethod
    def setUpClass(inst):

    inst.driver = webdriver.Chrome()
    inst.driver.get("http://localhost:9696")

    def test_scenario_01(self):

    # Setting up page objects
    login_page = LoginPage(self.driver)
    main_menu = MainMenu(self.driver)
    permissions_manager = PermissionsManager(self.driver)

    # Assert login of user is unsuccessful

    login_page.login("selen003")
    self.assertIn("http://localhost:9696/login?reason=incorrect", login_page.get_url(), "User already exists")

    # Admin log in and assign permission to User
    login_page.login("selen001")
    self.assertIn("http://localhost:9696/profile/", login_page.get_url(), "Unsuccessful Admin login")

    main_menu.click_pm()
    permissions_manager.add_user("selen003")

    time.sleep(3)

    permissions_manager.logout()

    # Attempt login of User again
    login_page.login("selen003")
    main_menu.logout()

    # Delete user, so the test can be re-done
    permissions_manager.delete_user("selen001", "selen003")

    @classmethod
    def tearDownClass(inst):
    inst.driver.quit()


    if __name__ == "__main__":
    unittest.main()

    该代码在这种情况下运行得非常好,并成功通过了测试。然而,由于几个原因,我感到不开心,我需要建议:
  • 测试场景是在单一的测试方法中,我真的放不下
    每个单独 Action 的多个断言(我可以,但我有
    听说真的不实用),但我真的很想测试每个
    单独的操作并引发相应的错误(例如:当
    用户登录,将在 html 报告中给出一条消息“步骤 2:
    用户XXX登录成功”
  • 也许,我应该将场景拆分为多个功能
    (test_valid_login()、test_invalid_login() 等)并实现一个
    TestSuite,导入各个测试并运行它们。然而
    我不确定在这种情况下这是否是一个有效的解决方案
  • 我想知道是否有更有效的方法(并允许
    以便将来更容易地实现方案)

  • 我只需要关于如何处理我的测试结构的建议,因为我不确定这是否是一个好的解决方案(有些东西告诉我它不是),如果你能给我一些提示/想法,我将不胜感激。

    最佳答案

    您可以为您的测试创建一个基类(如 PageTests 类)并将常用功能(登录、添加用户、...)与您希望在此步骤中拥有的所有断言和输出一起放在那里。
    然后从这个类继承你的实际测试用例并调用适当的函数。通过这种方式,您可以重复使用常见步骤而无需重复代码,并在检查所有条件的同时保持测试场景的整洁和最小化。

    关于python - 需要有关测试类结构的建议(Python、Selenium),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57407141/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com