gpt4 book ai didi

java - TestNG - 工厂和数据提供者

转载 作者:行者123 更新时间:2023-11-30 06:37:53 25 4
gpt4 key购买 nike

背景故事

我在一家软件公司工作,开发一个测试自动化框架来取代我们旧的意大利面条式纠结系统。

由于我们的系统几乎所有操作都需要登录,所以我决定最好使用@BeforeMethod、@DataProvider 和@Factory 来设置我的测试。但是,我遇到了一些问题。

示例测试用例

假设软件系统是棒球队名单。我们想进行测试以确保用户可以按姓名搜索团队成员。

(注意:我知道 BeforeMethods 不会以任何给定的顺序运行——假设现在已经处理好了。)

@BeforeMethod
public void setupSelenium() {
// login with username & password
// acknowledge announcements
// navigate to search page
}

@Test(dataProvider="players")
public void testSearch(String playerName, String searchTerm) {
// search for "searchTerm"
// browse through results
// pass if we find playerName
// fail (Didn't find the player)
}

此测试用例假设如下:

  • 用户已经登录(很可能是在 BeforeMethod 中)
  • 用户已经导航到搜索页面(简单,before 方法)
  • 测试参数与上述登录相关联

问题

那么让我们尝试弄清楚如何处理测试用例的参数。

想法#1

此方法允许我们将数据提供者与用户名相关联,并允许我们为任何特定的测试用例使用多个用户!

@Test(dataProvider="players")
public void testSearch(String user, String pass, String name, String search) {
// login with user/pass
// acknowledge announcements
// navigate to search page
// ...
}

...但是有很多重复,因为我们必须让每个函数都接受两个额外的参数。更不用说,我们还在测试确认通知功能,我们实际上并不想测试它。

想法#2

所以让我们使用工厂来正确地初始化东西吧!

class BaseTestCase {

public BaseTestCase(String user, String password, Object[][] data);

}

class SomeTest {

@Factory
public void ...

}

这样一来,我们最终不得不为每个测试用例编写一个工厂...不过,它确实让我们每个测试用例都有多个用户。

结论

我快要没有想法了。我有另一个想法,我从 XML 文件加载数据,然后从程序调用方法……但它变得很愚蠢。

有什么想法吗?

最佳答案

首先,您似乎试图在每个测试用例中做太多事情。例如,如果您正在搜索某些内容,为什么需要在搜索过程中测试导航?

其次,您的要求似乎不明确。您可以创建一个测试,向它发送一个搜索词并返回一个结果吗?看来这应该是您的第一个测试。

第三,为什么授权的 session 连接/对象不能成为测试的要求?从代码的外观来看,您似乎正在通过 HTTP 进行某种调用。即使你不是,看起来你必须使用某种代理向你的应用程序发送消息,因为你必须传递用户名并传递每个请求......为什么不直接自动化整个过程将事情转化为“授权代理”对象,使您能够通过预授权连接发送请求?

然后只需将授权代理传递到您的测试中即可处理您的消息传递。或者更好的是,在您的预测试(BeforeMethods?)函数中设置您的授权代理,并将其作为类成员变量提供。

关于java - TestNG - 工厂和数据提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952170/

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