Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为执行自动化测试的每个测试类运行创建唯一的用户_Java_Api_Selenium_Testng_Ui Automation - Fatal编程技术网

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

Java 为执行自动化测试的每个测试类运行创建唯一的用户,java,api,selenium,testng,ui-automation,Java,Api,Selenium,Testng,Ui Automation,我已经使用Selenium和TestNG为一个web应用程序实现了并行测试,但是,我的webapp受到了一个限制,一次只能处理一个会话(它不支持多个会话,当您使用同一个用户登录时,它将断开您的旧会话),我想解决的解决方案是为每个测试创建一个唯一的用户(使用API),所以我已经实现了它,但当我并行运行测试时(使用testng.xml文件和thread count=“2”),我会创建同一个用户两次!使用相同的凭据,我希望能够创建一个唯一的用户,它将为每次运行创建一个唯一的用户 这是我的代码: pub

我已经使用Selenium和TestNG为一个web应用程序实现了并行测试,但是,我的webapp受到了一个限制,一次只能处理一个会话(它不支持多个会话,当您使用同一个用户登录时,它将断开您的旧会话),我想解决的解决方案是为每个测试创建一个唯一的用户(使用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();
    }


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

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

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

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

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

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方法片段,我们可以为您提供更多帮助。

是的,当然我会将其添加到我的问题中,通常我使用swagger来实现创建我的用户(这是用于创建新用户的webapp内部API),我会将其置于编辑状态,顺便说一句,我确实计划在测试完成后删除每个唯一的用户。您在这里调用
createUserCms()
,并且每次调用此方法时都传递unique
name
email
?我从adminSignIn()调用它从BaseApiTest调用的方法,我就是这样实现的:public void createUser()抛出InterruptedException,ApiException{Thread.sleep(2000);String response=usersAPI.createUserCms(用户名、电子邮件、电话号码、密码);Assert.assertEquals(响应,“用户已成功创建”);System.out.println(response);//T_Logger.info(“用户=[{}]已成功创建,密码=[{}]”,用户名,密码);}至于传递用户名和密码,我使用的是创建令牌的同一用户,我可以进一步使用该令牌创建新用户,所以实际上我一次又一次地使用同一个用户,这个用户正在创建各种不同的独特用户。明白了
UsersAPIUnitTest.getEmail()
此方法是否返回新用户?为用户获取新创建的电子邮件,但这是我的用户名,我可以使用此电子邮件登录。
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);
    }