有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Rally Java:创建重复的测试用例

我已经建立了一个Rally依赖项,它会自动创建测试用例,并在测试计划中创建一个文件夹。在创建测试用例时,它首先检查是否存在同名的现有测试用例,否则它将创建新的测试用例。 当测试用例的总大小很小,测试用例的大小增加时,我看到创建了重复的测试用例。所以我让线程在检查现有场景并创建新场景后等待几秒钟(thread.sleep(8000))。它是这样工作的

有没有更好的方法来处理&;实现此功能以处理任意大小的测试用例。请给我一些建议

String tcName = rallyMethods.getTestScenarios(parentFolder, scenarioName);
Thread.sleep(8000);

if (tcName == null) {
 rallyMethods.createTestCase(parentFolder, scenarioName);
 Thread.sleep(8000);
} else {
   rallyMethods.updateTestCase(parentFolder, scenarioName);
   Thread.sleep(8000);
}
 public String getTestScenarios(String parentFolderName, String ScenarioName) throws Throwable {
        String sName = null;
        String pFolder;

        QueryRequest testCaseRequest = new QueryRequest("TestCase");
        testCaseRequest.setLimit(Integer.MAX_VALUE);
        testCaseRequest.setPageSize(Integer.MAX_VALUE);
        testCaseRequest.setFetch(new Fetch("FormattedID", "Name", "Workspace", "Project", "TestFolder"));
        testCaseRequest.setQueryFilter(new QueryFilter("Name", "=", ScenarioName));
        testCaseRequest.setWorkspace(WORKSPACE_ID);
        testCaseRequest.setProject(PROJECT_ID);
        QueryResponse testCaseQueryResponse = query(testCaseRequest);
        int testCaseCount = testCaseQueryResponse.getTotalResultCount();
        // System.out.println("TestCaseCount:" + testCaseCount);

        for (int i = 0; i < testCaseCount; i++) {
            JsonObject scenarioObj = testCaseQueryResponse.getResults().get(i).getAsJsonObject();
            String scenarioName = String.valueOf(scenarioObj.get("Name").getAsString());
            JsonElement pFolderObj = scenarioObj.get("TestFolder");

            if (!(pFolderObj.isJsonNull())) {
                JsonObject tFolderObj = scenarioObj.get("TestFolder").getAsJsonObject();
                pFolder = String.valueOf(tFolderObj.get("Name").getAsString());

                if (parentFolderName.equalsIgnoreCase(pFolder)) {
                    sName = scenarioName;
                    logger.info("Test Scenarios identified in Rally: " + sName);
                } else {
                    logger.info("Scenario, " + ScenarioName + " not found, New Scenario will be created in Rally");
                }
            }
        }
        return sName;
    }
 public void createTestCase(String parentFolderName, String testCaseName) throws Throwable {
        String tcName = null;
        String userID = readUser();

        // Query Child Folders:
        QueryRequest testFolderRequest = new QueryRequest("TestFolder");
        testFolderRequest.setFetch(new Fetch("Name", "Workspace", "Project"));
        testFolderRequest.setQueryFilter(new QueryFilter("Name", "=", parentFolderName));
        testFolderRequest.setWorkspace(WORKSPACE_ID);
        testFolderRequest.setProject(PROJECT_ID);
        QueryResponse testFolderQueryResponse = query(testFolderRequest);

        int folderCount = testFolderQueryResponse.getTotalResultCount();

        for (int i = 0; i < folderCount; i++) {
            String testFolderRef = testFolderQueryResponse.getResults().get(i).getAsJsonObject().get("_ref").getAsString();
            JsonObject testFolderObj = testFolderQueryResponse.getResults().get(i).getAsJsonObject();
            String pFolder = String.valueOf(testFolderObj.get("Name").getAsString());

            if (pFolder.equalsIgnoreCase(parentFolderName)) {

                //System.out.println("Creating a test case...");
                JsonObject newTC = new JsonObject();
                newTC.addProperty("Name", testCaseName);
                newTC.addProperty("Workspace", WORKSPACE_ID);
                newTC.addProperty("Project", PROJECT_ID);
                newTC.addProperty("Description", "Selenium Automated TestCase");
                newTC.addProperty("TestFolder", testFolderRef);
                newTC.addProperty("Method", "Automated");
                newTC.addProperty("Type", "Functional");
                if (!(userID == null)) {
                    newTC.addProperty("Owner", userID);
                }

                CreateRequest createRequest = new CreateRequest("testcase", newTC);
                CreateResponse createResponse = create(createRequest);
                if (createResponse.wasSuccessful()) {
                    JsonObject tcObj = createResponse.getObject();
                    tcName = String.valueOf(tcObj.get("Name").getAsString());
                    logger.info("Created test scenario name is: " + tcName);
                } else {
                    String[] createErrors;
                    createErrors = createResponse.getErrors();
                    logger.info("Error while creating test scenario below parent folder!");
                    for (int j = 0; j < createErrors.length; j++) {
                        System.out.println(createErrors[j]);
                        logger.info(createErrors[j]);
                    }
                }
            }
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    嗯。。。我对JavaREST工具包不太熟悉,但我想不出为什么工作区中的一组更大的测试用例会导致查询像这样失败

    你试过检查testCaseQueryResponse.wasSuccessful()?如果返回false,您能看到错误是什么吗testCaseQueryResponse.getErrors()

    我的第一个想法是,应该为limit和pageSize参数提供一个合理的值,而不是传递Integer.MAX_VALUE。其次,与检查返回的测试用例是否在指定的父文件夹中不同,您应该包括一个查询过滤器来过滤TestFolder.Name = parentFolderName上的测试用例结果。那么您应该只希望返回1或0个结果(假设您希望测试文件夹中的所有测试用例都有唯一的名称)