使用不同数据测试多个环境 - 最佳实践
Testing multiple environments with different data - best practice
我需要能够 运行 在不同的环境(最多 3 个)上进行相同的测试,但每个环境的数据不同。
我有一个测试方法:
@Test (groups = "core", description = "Login: Valid log in")
public void validLogin() {
User user = UserData.user_2();
loginPage.logOn(user);
}
在用户数据中 class 我有:
public static User user_2() {
return new User().newUser("user2", "password");
}
"user2" 并非在所有环境中都存在。我可能无法更改所有环境中可用的数据以匹配测试数据。
测试将使用 Maven 和 TestNg 执行,因此我可以发送执行环境的参数。
我最初的想法是使用:
public static User user_2() {
switch(env) {
case "env1": return new User().newUser("user2", "password"); break;
case "env2": return new User().newUser("user2Z", "password"); break;
case "env3": return new User().newUser("user2X", "password"); break;
}
我的数据classes和方法(<100)数量有限,但有几千个测试。
设置和处理针对不同环境进行测试所需的数据的最佳方式是什么?
当涉及到不同的用户时,
您总是希望我所有的测试用例都保持原样,并进行最少的更改。
所以这就是我所遵循的。
我在 eclipse 中创建了一个文件,比如 username.properties 文件。
用户名=xyz@gmail.com
密码=passwd1
您可以在此处使用名称创建多个用户,即
rohan=rohan@gmail.com
rohan 的密码:rohan
现在我们需要在 class 中调用这个文件。
请参阅下面的示例。
主要测试
SignInPage.SendkeysMethodForSignInPAgeForPropertyFile(driver, By.cssSelector("input[id='Email']") , "username" );
SignInPage.SendkeysMethodForSignInPAgeForPropertyFile(driver, By.cssSelector("input[id='Passwd'][type='password']"), "password");
所以这里的用户名将从属性文件中获取。
这将转到 SendkeysMethodForSignInPAgeForPropertyFile,即:
public class 登录页面 {
public void SendkeysMethodForSignInPAgeForPropertyFile(WebDriver driver, By by, String Text) {
WebUtils.SendkeysForPropertyFile(driver,by, Text);
}
}
它将转到 SendkeysForPropertyFile 方法:
public static void SendkeysForPropertyFile(WebDriver driver, By by, String Text) {
ReadFileData File = new ReadFileData();
Properties Values = File.ReadFile();
WebElement Element = driver.findElement(by);
Element.clear();
if (Text == "username"){
Element.sendKeys(Values.getProperty("username"));
}
else {
Element.sendKeys(Values.getProperty("password"));
}
将从 ReadFileData() class 读取,即:
public class ReadFileData {
public Properties ReadFile() {
File file = new File("D:\Selenium\Gmail_Web_UI\Loginproperty.properties");
FileInputStream fileInput = null;
try {
fileInput = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Properties prop = new Properties();
//load properties file
try {
prop.load(fileInput);
} catch (IOException e) {
e.printStackTrace();
}
return prop;
}
这有助于将我们的用户名和密码保存在一个文件中。
回复我进一步查询。快乐学习:-)
我需要能够 运行 在不同的环境(最多 3 个)上进行相同的测试,但每个环境的数据不同。
我有一个测试方法:
@Test (groups = "core", description = "Login: Valid log in")
public void validLogin() {
User user = UserData.user_2();
loginPage.logOn(user);
}
在用户数据中 class 我有:
public static User user_2() {
return new User().newUser("user2", "password");
}
"user2" 并非在所有环境中都存在。我可能无法更改所有环境中可用的数据以匹配测试数据。
测试将使用 Maven 和 TestNg 执行,因此我可以发送执行环境的参数。
我最初的想法是使用:
public static User user_2() {
switch(env) {
case "env1": return new User().newUser("user2", "password"); break;
case "env2": return new User().newUser("user2Z", "password"); break;
case "env3": return new User().newUser("user2X", "password"); break;
}
我的数据classes和方法(<100)数量有限,但有几千个测试。
设置和处理针对不同环境进行测试所需的数据的最佳方式是什么?
当涉及到不同的用户时, 您总是希望我所有的测试用例都保持原样,并进行最少的更改。 所以这就是我所遵循的。 我在 eclipse 中创建了一个文件,比如 username.properties 文件。
用户名=xyz@gmail.com 密码=passwd1
您可以在此处使用名称创建多个用户,即
rohan=rohan@gmail.com rohan 的密码:rohan
现在我们需要在 class 中调用这个文件。 请参阅下面的示例。
主要测试
SignInPage.SendkeysMethodForSignInPAgeForPropertyFile(driver, By.cssSelector("input[id='Email']") , "username" );
SignInPage.SendkeysMethodForSignInPAgeForPropertyFile(driver, By.cssSelector("input[id='Passwd'][type='password']"), "password");
所以这里的用户名将从属性文件中获取。
这将转到 SendkeysMethodForSignInPAgeForPropertyFile,即:
public class 登录页面 {
public void SendkeysMethodForSignInPAgeForPropertyFile(WebDriver driver, By by, String Text) {
WebUtils.SendkeysForPropertyFile(driver,by, Text);
}
}
它将转到 SendkeysForPropertyFile 方法:
public static void SendkeysForPropertyFile(WebDriver driver, By by, String Text) {
ReadFileData File = new ReadFileData();
Properties Values = File.ReadFile();
WebElement Element = driver.findElement(by);
Element.clear();
if (Text == "username"){
Element.sendKeys(Values.getProperty("username"));
}
else {
Element.sendKeys(Values.getProperty("password"));
}
将从 ReadFileData() class 读取,即:
public class ReadFileData {
public Properties ReadFile() {
File file = new File("D:\Selenium\Gmail_Web_UI\Loginproperty.properties");
FileInputStream fileInput = null;
try {
fileInput = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Properties prop = new Properties();
//load properties file
try {
prop.load(fileInput);
} catch (IOException e) {
e.printStackTrace();
}
return prop;
}
这有助于将我们的用户名和密码保存在一个文件中。 回复我进一步查询。快乐学习:-)