java - 如何使用TestNG创建多用户测试场景?

标签 java design-patterns testing selenium testng

我需要做的是为我们的应用程序创建 UI 测试用例,我们决定将 Selenium 与 TestNG 结合使用(如果有相当大的优势,我们仍然对其他选择持开放态度)。

我们尝试创建的测试是多个用户使用应用程序相互交互的测试。基本上我们需要让多个用户并行登录到我们的应用程序并执行不同的操作。用户的 Action 之间存在联系,因此他们需要在某些点上同步他们的交互(例如,用户需要等待不同的用户执行一个 Action ,然后他才能执行他的 Action )。这意味着用户之间还需要某种共享信息(我只是想共享一个对象来处理同步点)。

如果我需要描述将使用 TestNG 并行运行的不同用户的操作,我应该如何构建我的场景?

是否有更好的框架或者是否有解决此问题的模式?欢迎任何建议!谢谢。

编辑:
到目前为止我能做的最好的事情是创建一个测试,其中每个 @Test 方法都有每个用户的操作,然后创建一个套件,我在其中定义测试方法应该并行运行。示例:

public class MultiUserTest {
    @Test
    public void user1Interaction() {
        User user1 = new User();
        // user1 performs actions
    }

    @Test
    public void user2Interaction() {
        User user2 = new User();
        // user2 performs actions
    }
}

然后创建一个测试套件,我在其中指定 MultiUserTest 的方法应该并行运行。

但是我不太喜欢这个解决方案。我不喜欢这样的事实,即我依赖 XML 配置(测试套件)来描述我的测试的正确行为(仅通过查看 Java 代码就不会很明显)。我也不喜欢这样一个事实,即我将无法通过执行“Run As - TestNG Test”在 eclipse 上使用 TestNG 插件来简单地运行测试。同样,非常欢迎任何建议。谢谢!

最佳答案

我认为您可以使用任何您喜欢的测试框架。

问题是您必须在一个测试方法中异步执行用户操作,并在某个时候同步它们。

我推荐你的方法是使用 ExecutorService来自 java.util.concurrent 包的框架。

所以首先你必须创建执行器

ExecutorService executorService = Executors.newFixedThreadPool(2);

接下来使用executor异步运行任务使用submit使用 get 方法和同步操作方法。

见下面的代码示例

@Test
public void test() throws Exception {

    final User firstUser = new User();

    Future<?> firstUserAction = executorService.submit(new Runnable() {
        @Override
        public void run() {
            firstUser.doSomething();
            firstUser.doSomethingElse();
        }
    });

    final User secondUser = new User();
    Future<?> secondUserAction = executorService.submit(new Runnable() {
        @Override
        public void run() {
            secondUser.doSomething();
        }
    });


    // synchronization
    firstUserAction.get();
    secondUserAction.get();
    // synchronized now

    secondUserAction = executorService.submit(new Runnable() {
        @Override
        public void run() {
            secondUser.doSomethingElse();
        }
    });




}

关于java - 如何使用TestNG创建多用户测试场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408425/

相关文章:

ruby-on-rails - 插件关系设计

php - 这是什么设计模式?

PHPUnit 测试异常和 AssertEquals

java - 无法在 Javafx 2.0 上实例化 Path() 类

java - 我如何知道Java中Word文档的确切扩展名

java - Jackson 映射对象是 DAO 吗?

testing - 要有效地使用 Selenium 工具进行自动化测试,应该了解哪些脚本语言

django - Selenium 与老式的基于 POST/GET 的测试

java - 如何找到 "already defined in an unnamed package"的 Java 类?

java - 有条件地订阅 rxJava2 Observable