pytest selenium 并发执行多条用例,所有用例都需要登录账号后进行操作,账号不能被同时登录,用例完毕后将账号归还,下一个用例可以继续使用,账号如何管理
时间: 2024-04-17 10:26:41 浏览: 153
在 pytest 和 Selenium 中实现并发执行多条用例,并管理登录账号的过程,可以使用 pytest 的 fixture 功能和一个账号管理类来实现。以下是一种可行的方法:
1. 创建一个账号管理类,例如 `AccountManager`,用于管理账号的分配和归还。
```python
class AccountManager:
def __init__(self, accounts):
self.accounts = accounts
self.used_accounts = set()
def get_account(self):
available_accounts = self.accounts - self.used_accounts
if not available_accounts:
raise Exception("No available account")
account = available_accounts.pop()
self.used_accounts.add(account)
return account
def return_account(self, account):
self.used_accounts.remove(account)
```
2. 创建一个 pytest 的 fixture,用于初始化账号管理器并提供获取账号的功能。
```python
import pytest
@pytest.fixture(scope="session")
def account_manager():
# 假设账号列表为 ["user1", "user2", "user3"]
accounts = set(["user1", "user2", "user3"])
manager = AccountManager(accounts)
return manager
@pytest.fixture
def account(account_manager):
# 获取账号
account = account_manager.get_account()
yield account
# 用例完成后归还账号
account_manager.return_account(account)
```
3. 在测试函数中使用 `account` fixture 获取账号,并进行登录和操作。
```python
def test_case_1(account):
# 使用账号进行登录和操作
print(f"Running test case 1 with account: {account}")
def test_case_2(account):
# 使用账号进行登录和操作
print(f"Running test case 2 with account: {account}")
```
在上述示例中,`account_manager` 是一个 pytest 的 session 级别的 fixture,用于创建账号管理器,并在整个测试会话期间共享。`account` 是一个普通的 fixture,使用了 `account_manager` fixture 来获取账号,并在测试函数中使用。
当运行多个用例时,每个用例都会获取一个未被使用的账号,并在完成后归还账号,以供其他用例继续使用。
请注意,上述示例中的账号管理类和账号列表仅作为示例,实际使用中可能需要根据具体情况进行适当的修改和扩展。
阅读全文