我在json文件中有一个测试数据,如下所示-
{
"alerts" : [
{
"alert_name" : "employee",
"sql_query" : "select * from employee",
"description" : "Query with Variables",
"default_interval" : "10 minutes",
"default_priority" : "Critical",
"variables" : [{
"variable" : "failurereason",
"value" : "INVALID USER"
},
{
"variable" : "count",
"value" : "1"
}]
},
{
"alert_name" : "employee2",
"sql_query" : "select * from employee2",
"description" : "Query with Variables",
"default_interval" : "10 minutes",
"default_priority" : "Critical",
"variables" : [{
"variable" : "failurereason",
"value" : "INVALID USER"
},
{
"variable" : "count",
"value" : "1"
}]
}
我在java selenium中有一个测试方法,它将遍历json,并用实际数据检查数据是否存在。下面是Java selenium方法。
public boolean createAlert(String jsonFile,String Host, String Port) {
boolean success = true;
String logStr = "Unable to create Alert";
JSONObject readJsonFilePath = rjf.readJsonFilePath(jsonFile);
JSONArray alertsJsonArray = readJsonFilePath.getJSONArray("alerts");
System.out.println("+++++ Number of Test Cases to be run are : " + alertsJsonArray.length() + " +++++");
for(int i = 0; i < alertsJsonArray.length(); i++)
{
JSONObject alertJsonObject = alertsJsonArray.getJSONObject(i);
String description = alertJsonObject.getString("description");
System.out.println("+++++++++++Test Case : " + i + " Running : " + description + " ++++++++++++++");
String alert_name = alertJsonObject.getString("alert_name");
String sql_query = alertJsonObject.getString("sql_query");
String defaultInterval = alertJsonObject.getString("default_interval");
String defaultPriority = alertJsonObject.getString("default_priority");
if (
this.clickUponCreate(alert_name,sql_query) &&
this.setVariablesInVariableBar(alertJsonObject,"variables") &&
this.runQueryCreateAlertAndVerifyIsAlertCreated(alert_name, Host, Port, defaultInterval, defaultPriority))
{
logStr = "Able to set the values ";
}
else {
System.out.println(TEXT_RED + alert_name + description + "Test Case : " + i + " Failed");
success=false;
}
}
System.out.println(logStr);
return success;
}
上面的代码循环了两次,因为json对象有两个测试数据,现在如果其中一个测试在最后失败,它只会提到测试失败,因为它是在else条件中添加的。
我使用了如下软断言-
softassert.assertTrue(page.createAlert(jsonFile,Host,Port),
"test11.1: Verified combinations of Alerts");
我不知道json文件中的两个测试数据集中哪一个失败了。运行后,如果其中一个失败,它只会提到“验证的测试应该是真的,但它是假的”
假设我有100个测试数据,类似地,如何从json测试数据集中识别失败的测试数据。有办法吗?
实现这一点有两种方法:
1) 使用软断言。
您可以在软断言中添加一条消息以识别哪个测试用例失败。根据代码,我可以看到您正在打印测试用例编号和描述。
softassert.assertTrue(page.createAlert(jsonFile,Host,Port),
"test11.1: Verified combinations of Alerts",
"Test Case : " + i + " Failed : " + description);
2) 正确的方法是使用dataprovider:通过使用dataprovider,您可以根据可用的测试数据执行测试方法,即使一个测试方法失败,也会执行另一个测试方法。因此,您的代码不会中断。
注意:请更改并更正代码
@DataProvider
public Object[][] getJsonData(){
return createAlert("","","");
}
@Test(dataProvider = "jsonData")
public void testJson(String alert_name, String sql_query, String defaultInterval, String defaultPriority){
//Add your logic here
}
public Object[][] createAlert(String jsonFile, String Host, String Port) {
boolean success = true;
String logStr = "Unable to create Alert";
JSONObject readJsonFilePath = rjf.readJsonFilePath(jsonFile);
JSONArray alertsJsonArray = readJsonFilePath.getJSONArray("alerts");
System.out.println("+++++ Number of Test Cases to be run are : " + alertsJsonArray.length() + " +++++");
Object[][] jsonData = new Object[alertsJsonArray.length()][4];
for(int i = 0; i < alertsJsonArray.length(); i++)
{
JSONObject alertJsonObject = alertsJsonArray.getJSONObject(i);
String description = alertJsonObject.getString("description");
System.out.println("+++++++++++Test Case : " + i + " Running : " + description + " ++++++++++++++");
String alert_name = alertJsonObject.getString("alert_name");
String sql_query = alertJsonObject.getString("sql_query");
String defaultInterval = alertJsonObject.getString("default_interval");
String defaultPriority = alertJsonObject.getString("default_priority");
jsonData[i][0] = alert_name;
jsonData[i][1] = sql_query;
jsonData[i][2] = defaultInterval;
jsonData[i][3] = defaultPriority;
}
System.out.println(logStr);
return jsonData;
}
下面是TestNG框架中的一个示例断言方法。 下面是fail方法。 在TestNG中是否有一个内置的方法来执行软断言。如果没有,实现这一点的理想方式是什么。
很新的反应。。。 我试图循环我的this.props.children,以便向他们传递一个在我的父项中定义的字符串。。。在没有在render方法中定义这些子对象的情况下,这是可能的吗? OwnRenderer应该将道具字符串传递给它的所有子级。。。OwnRenderer不知道要渲染哪个孩子,因此无法通过“”直接传递道具。。。 我试着绕过孩子们直接传递那根绳子,但不幸的是,这不起作用。 不知怎的,它
问题内容: 假设我有两个输入框,分别具有对应的ng-model作为fname和lname。如果我将http请求称为: 它会调用URL: 我在后端(python)遇到的错误是: 这些参数不以字符串形式发送吗?如果没有,该如何解决? 问题答案: 这是您的操作方式: Angular负责对参数进行编码。 Maxim Shoustin的答案不起作用(这不是有效的JavaScript文字),而JeyTheva
我目前正在使用环境变量向负载测试传递自定义参数。例如,我的测试类如下所示: 然后,我将使用以下工具运行测试: 有没有更多的方式可以将自定义参数传递给命令行应用程序?
我目前在一个项目中使用TestNG启动Selenium测试套件,并处理maven项目中所有结果的日志记录,该项目在Jenkins的工作中每晚运行。 当前,当一个测试失败了一个断言时,TestNG会杀死我们正在运行的所有东西,它不仅会使当前测试失败,还会继续运行套件中的其他测试。我不明白为什么TestNG不只是使当前的测试失败,然后启动剩余的尚未运行的测试。这使得TestNG在这一点上成为一个无用的
我有三节课 1.菜单活动 2.LocationUpdateService 3.多重标记器 1.菜单活动 2、LocationUpdateService:(这是服务类) 3、多重标记(活动) 我的问题是:当我打开我的菜单活动我的Toast消息打印发送数据到广播接收器,然后点击按钮我调用MultipleMarker。我无法从服务中获取值。。。但当我按下后退按钮时,我重定向到MenuActivity,此