微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为每个运行执行自动化测试的测试类创建唯一用户

如何解决为每个运行执行自动化测试的测试类创建唯一用户

我已经使用 Selenium 和 TestNG 为 Web 应用程序实现了并行测试,但是,我的 Web 应用程序有一个限制,即一次只能处理一个会话(当您使用同一用户登录时,它不支持多会话)它会断开你的旧会话),我想解决它的解决方案是为每个测试创建一个唯一的用户(使用 API),所以我已经实现了它,但是当我并行运行测试时(使用 testng. xml 文件,thread-count="2") 我正在创建相同的用户两次!使用相同的凭据,我希望能够创建一个唯一用户,它会为每次运行创建一个唯一用户

这是我的代码

public class BaseApiTest extends BaseTest {
    protected String token;
    protected String CREATED_ADMIN_TEST_USER;
    protected String CREATED_ADMIN_TEST_PASSWORD;
    private static final atomicreference<String> ACCESS_TOKEN = new atomicreference<>();

    @BeforeClass(alwaysRun=true)
    public void baseApiSetup() throws InterruptedException,ApiException {
        generatetoken();
        createAdminUser();
    }

    private void generatetoken() {
        ........
        ..........
        ...........
        token = "Bearer " + ACCESS_TOKEN.get();
        context.setAttribute("api-key",token);
        context.setAttribute("HOST",HOST);
        T_Logger.info("Host url address is: =[{}]",HOST);
        T_Logger.info("new api key token =[{}]",token);
    }

    private void createAdminUser() throws ApiException,InterruptedException {
        UsersAPIUnitTest usersAPITU = new UsersAPIUnitTest(context);
        usersAPITU.createuser();
        CREATED_ADMIN_TEST_USER = UsersAPIUnitTest.getEmail();
        CREATED_ADMIN_TEST_PASSWORD = UsersAPIUnitTest.getpassword();
    }


}

这被新创建的用户登录页面使用:

protected void adminSignIn() {
        loginPage.login(CREATED_ADMIN_TEST_USER,CREATED_ADMIN_TEST_PASSWORD,true);
        writetoLoggerSignIn(CREATED_ADMIN_TEST_USER);
    }

然后我开始运行我的测试。

预期:每个测试类将包含自己的唯一用户

实际:创建的所有用户都是具有相同凭据的同一用户

========================编辑============== ==================

这就是我创建新用户的方式:

public String createuserCms(String name,String email,String phone,String password) throws ApiException {
        NewUserPayload body = new NewUserPayload();
        body.setStatus(true);
        body.setName(name);
        body.setEmail(email);
        body.setPhone(phone);
        body.setPassword(password);
        body.setPasswordConfirmation(password);
        printBody(body);
        return usersApi.createuser(token,body);
    }

解决方法

我一直在为此问题制定通用解决方案,以便所有自动化团队都可以使用它,并且仍在进行中。我相信您会探索其他选项,但是每次运行测试时都创建用户并不是一个好主意,而是您必须创建一次用户并使用它们,否则您最终会在系统中添加更多用户(如果您正在清理用户 @afterMethod 没关系)

但就目前而言,就您而言,您必须确保在创建用户时传递唯一的姓名/电子邮件并返回该用户名/电子邮件地址。

如果您可以分享您的 createUser 方法片段,我们可以为您提供更多帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。