Пример #1
0
    def test_create(self):

        tc= TestCase( self.env, dict(zip(TC_KEYS[1:], self.tcvals)) )
        for a in self.acdicts:
            tc.add_action( TestAction( self.env, a ))

        for k, v in zip(TC_KEYS[1:], self.tcvals):
            self.assertEqual(v, tc[k])


        self.assertEqual(2, len(tc.actions))
Пример #2
0
    def test_find_related_test_case(self):
        # simulate test_case creation
        test_case = TestCase(contract_hash='f3da12622e9bb2b3f367a650a81fd8c70b2eb495', 
                transaction_hash='c33fd08be47a978778f1c7098804d8339ce6ec4002e8e7de580552785dca80f5', 
                event_type='SmartContract.Runtime.Log', 
                expected_payload_type='String', 
                expected_payload_value='Contract was called',
                active= True
            )
        self.test_session.add(test_case)
        self.test_session.commit()

        # simulate receiving a sc_event
        sc_event = self.generic_sc_event
        sc_event['tx_hash'] = 'c33fd08be47a978778f1c7098804d8339ce6ec4002e8e7de580552785dca80f5'
        sc_event['contract_hash'] = 'f3da12622e9bb2b3f367a650a81fd8c70b2eb495'
        sc_event['event_type'] = 'SmartContract.Runtime.Log'
        sc_event['event_payload']['type'] = 'String'
        sc_event['event_payload']['value'] = 'Contract was called'

        found_test_case = self.test_session.query(TestCase). \
            filter_by(contract_hash=sc_event['contract_hash'], transaction_hash=sc_event['tx_hash'],
                      event_type=sc_event['event_type'], active=True).first()

        self.assertEqual(test_case, found_test_case)
Пример #3
0
    def get(self, project_name, case_name=None):
        """
        Get testcases(s) info
        :param project_name:
        :param case_name:
        """

        if case_name is None:
            case_name = ""

        get_request = dict()
        get_request["project_name"] = project_name

        if len(case_name) > 0:
            get_request["name"] = case_name

        res = []
        cursor = self.db.test_cases.find(get_request)
        print get_request
        while (yield cursor.fetch_next):
            test_case = TestCase.test_case_from_dict(cursor.next_object())
            res.append(test_case.format_http())

        meta = dict()
        meta["total"] = len(res)
        meta["success"] = True if len(res) > 0 else False

        answer = dict()
        answer["test_cases"] = res
        answer["meta"] = meta

        self.finish_request(answer)
Пример #4
0
def add_case():
    if not session.get('logged_in'):
        abort(401)
    tc = TestCase(
        request.form['title'],
        TestSuite.query.filter(TestSuite.id == request.form['ts_id']).first())
    db_session.add(tc)
    db_session.commit()
    flash('New entry was succesfully posted')
    return redirect(url_for('show_cases', ts_id=request.form['ts_id']))
Пример #5
0
    def test_set_status(self):
        tc= TestCase( self.env, dict(zip(TC_KEYS[1:], self.tcvals)) )
        for a in self.acdicts:
            tc.add_action( TestAction( self.env, a ))
        tc.insert()

        for a in tc.actions:
            a.set_status(FAILED, 'dat war wohl nix')
        tc.set_status(FAILED)
Пример #6
0
 def tests_parser_v1(self, json):
     testData = json['test-cases']
     dateRun = parse(str(json['timestamp']))
     suite = json['suite-name']
     for testcase, data in testData.items():
         self.testcase_parser_v1(testcase, data, dateRun, suite)
         testCaseId = TestCase.gettestcaseid(testcase, dateRun)
         for test in data:
             testName = test["test-name"]
             testMessage = test["message"]
             testResult = test["result"]
             if not Test.isdupe(testName, testCaseId):
                 db.session.add(Test(TestCaseId=testCaseId, TestName=testName, Message=testMessage, Result=testResult))
                 db.session.commit()
             else:
                 pass
Пример #7
0
 def test_test_case_creation(self):
     # directly create test into the database
     test_case = TestCase(contract_hash='f3da12622e9bb2b3f367a650a81fd8c70b2eb495', 
             transaction_hash='c33fd08be47a978778f1c7098804d8339ce6ec4002e8e7de580552785dca80f5', 
             event_type='SmartContract.Runtime.Log', 
             expected_payload_type='String', 
             expected_payload_value='Contract was called',
             active= True
         )
     self.test_session.add(test_case)
     self.test_session.commit()
     t_case = self.test_session.query(TestCase).filter_by(
             contract_hash='f3da12622e9bb2b3f367a650a81fd8c70b2eb495', 
             transaction_hash='c33fd08be47a978778f1c7098804d8339ce6ec4002e8e7de580552785dca80f5', 
             event_type='SmartContract.Runtime.Log').first()
     self.assertEqual(test_case, t_case)
Пример #8
0
 def writeData(request, file_path):
     project_name = readRowsData(file_path)[0][1]
     for test_case in readRowsData(file_path)[2:]:
         TestCase(
             project_name=project_name,
             number=test_case[0],
             function_model=test_case[1],
             title=test_case[2],
             precondition=test_case[3],
             procedure=test_case[4],
             ex_result=test_case[5],
             #pr_result=test_case[6],
             #test_result=test_case[7],
             grade=test_case[8],
             create_user=request.session.get("username"),
             modify_user=request.session.get("username")).save()
Пример #9
0
    def put(self, project_name, case_name):
        """
        Updates the name and description of a test case
        :raises HTTPError (HTTP_NOT_FOUND, HTTP_FORBIDDEN)
        """

        print "PUT request for : {}/{}".format(project_name, case_name)
        case_request = {"project_name": project_name, "name": case_name}

        # check if there is a case for the project in url parameters
        mongo_dict = yield self.db.test_cases.find_one(case_request)
        test_case = TestCase.test_case_from_dict(mongo_dict)
        if test_case is None:
            raise HTTPError(
                HTTP_NOT_FOUND, "{} could not be found as a {} case to be updated".format(case_name, project_name)
            )

        new_name = self.json_args.get("name")
        new_project_name = self.json_args.get("project_name")
        new_description = self.json_args.get("description")

        # check if there is not an existing test case
        # with the name provided in the json payload
        mongo_dict = yield self.db.test_cases.find_one({"project_name": new_project_name, "name": new_name})
        if mongo_dict is not None:
            raise HTTPError(HTTP_FORBIDDEN, "{} already exists as a project".format(new_name))

        # new dict for changes
        request = dict()
        request = prepare_put_request(request, "name", new_name, test_case.name)
        request = prepare_put_request(request, "project_name", new_project_name, test_case.project_name)
        request = prepare_put_request(request, "description", new_description, test_case.description)

        # we raise an exception if there isn't a change
        if not request:
            raise HTTPError(HTTP_FORBIDDEN, "Nothing to update")

        # we merge the whole document """
        edit_request = test_case.format()
        edit_request.update(request)

        """ Updating the DB """
        res = yield self.db.test_cases.update(case_request, edit_request)
        print res
        edit_request["_id"] = str(test_case._id)

        self.finish_request({"message": "success", "content": edit_request})
Пример #10
0
    def test_success_should_eql_true(self):
        # simulate test_case creation
        t_case = TestCase(contract_hash='f3da12622e9bb2b3f367a650a81fd8c70b2eb495', 
                transaction_hash='c33fd08be47a978778f1c7098804d8339ce6ec4002e8e7de580552785dca80f5', 
                event_type='SmartContract.Runtime.Log', 
                expected_payload_type='String', 
                expected_payload_value='Contract was called',
                active= True
            )
        self.test_session.add(t_case)
        self.test_session.commit()

        # simulate receiving a sc_event
        sc_event = self.generic_sc_event
        sc_event['tx_hash'] = 'c33fd08be47a978778f1c7098804d8339ce6ec4002e8e7de580552785dca80f5'
        sc_event['contract_hash'] = 'f3da12622e9bb2b3f367a650a81fd8c70b2eb495'
        sc_event['event_type'] = 'SmartContract.Runtime.Log'
        sc_event['event_payload']['type'] = 'String'
        sc_event['event_payload']['value'] = 'Contract was called'
        
        # simulates handle event function from tasks
        found_test_case = self.test_session.query(TestCase). \
            filter_by(contract_hash=sc_event['contract_hash'], transaction_hash=sc_event['tx_hash'],
                      event_type=sc_event['event_type'], active=True).first()

        # simulates evaluate function from tasks
        test_case = self.test_session.query(TestCase).get(found_test_case.id)
        if not test_case.success:
            sc_event_payload = sc_event['event_payload']

            if sc_event['event_type'] == test_case.event_type.value and sc_event_payload['type'] == test_case.\
                    expected_payload_type.value:
                if str(sc_event_payload['value']) == test_case.expected_payload_value:
                    test_case.sc_event = json.dumps(sc_event)
                    test_case.active = False
                    test_case.success = True
                else:
                    test_case.sc_event = json.dumps(sc_event)
                    test_case.active = False
                    test_case.success = False

        self.assertEqual(test_case.active, False)
        self.assertEqual(test_case.success, True)
Пример #11
0
    def post(self, project_name):
        """ Create a test case"""

        print "POST Request for {}".format(project_name)

        if self.json_args is None:
            raise HTTPError(HTTP_BAD_REQUEST, "Check your request payload")

        # retrieve test project
        mongo_dict = yield self.db.test_projects.find_one({"name": project_name})
        if mongo_dict is None:
            raise HTTPError(HTTP_FORBIDDEN, "Could not find project {}".format(project_name))

        # test_project = TestProject.testproject_from_dict(self.json_args)

        case = TestCase.test_case_from_dict(self.json_args)
        case.project_name = project_name
        case.creation_date = datetime.now()

        future = self.db.test_cases.insert(case.format())
        result = yield future
        case._id = result
        self.finish_request(case.format_http())
Пример #12
0
 def testcase_parser_v1(self, name, data, date, suite):
     caseName = name
     dateRun = date
     suiteId = Suite.getsuiteid(suite, dateRun)
     testResults = [0, 0, 0, 0]  # pass, fail, error, skip
     for test in data:
         if self.is_result_valid(test["result"]):
             if test["result"] == "passed":
                 testResults[0] += 1
             elif test["result"] == "failure":
                 testResults[1] += 1
             elif test["result"] == "error":
                 testResults[2] += 1
             else:
                 testResults[3] += 1
     testPass, testFail, testError, testSkip = testResults
     testCount = sum(testResults)
     if not TestCase.isdupe(caseName, dateRun):
         db.session.add(TestCase(SuiteId=suiteId, TestCaseName=caseName, TestCount=testCount,
                                 PassCount=testPass, FailCount=testFail, ErrorCount=testError,
                                 SkipCount=testSkip, DateRun=dateRun))
         db.session.commit()
     else:
         pass
Пример #13
0
def createTestCase(request):
    if request.method == 'POST':
        form = CreateTestCaseForm(request.POST)
        # 验证数据的合法性
        if form.is_valid():
            # 如果提交数据合法,调用表单的 save 方法将数据保存到数据库
            TestCase(project_name=request.POST["project_name"],
                     number=request.POST["number"],
                     function_model=request.POST["function_model"],
                     title=request.POST["title"],
                     precondition=request.POST["precondition"],
                     procedure=request.POST["procedure"],
                     grade=request.POST["grade"],
                     test_result="未测试",
                     create_user=request.session.get("username"),
                     modify_user=request.session.get("username")).save()
            # 创建成功,跳转回首页
            return HttpResponseRedirect('/testadmin/testCase')
    else:
        form = CreateDatabaseInfoForm()
    return render(request, "testadmin/create_testcase.html", {
        'form': form,
        'post': request.POST
    })
Пример #14
0
    def post(self,request):
        project_id = int(request.COOKIES["p_id"])
        # 操作外键的的时候,必须要先实例化外键对应的mode
        if project_id != '':
            belong_project_id = ProjectInfo.objects.get(id=int(project_id))
            case_info = TestCase()
            name = request.POST.get("name", "")
            parent_area = int(request.POST.get("pId", ""))
            type = request.POST.get("type","")
            designer = request.user.username

            if type == 'ml'and parent_area > 0:
                # print(parent_area,type,name)
                case_info.name = name
                case_info.type = type
                case_info.belong_project = belong_project_id
                case_info.parent_id = parent_area
                case_info.designer = designer
                case_info.save()
                id = case_info.id
                # print(case_info.id,case_info.name,case_info.parent_area_id)
                return JsonResponse({"msg": "新增节点成功","code": 200,'id': id})
            elif type == 'ml'and parent_area == 0:
                case_info.name = name
                case_info.type = type
                case_info.belong_project = belong_project_id
                case_info.designer = designer
                case_info.save()
                id = case_info.id
                # print(case_info.id,case_info.name,case_info.parent_area_id)
                return JsonResponse({"msg": "新增根节点成功", "code": 200, 'id': id})
            elif type == 'yl':
                jb = request.POST.get("jb", "")
                precondition = request.POST.get("precondition", "")
                operation = request.POST.get("operation", "")
                expect_result = request.POST.get("expect_result", "")
                case_desc = request.POST.get("case_desc", "")
                case_info.belong_project = belong_project_id
                case_info.name = name
                case_info.parent_id = parent_area
                case_info.type = type
                case_info.jb = jb
                case_info.precondition = precondition
                case_info.operation = operation
                case_info.expect_result = expect_result
                case_info.case_desc = case_desc
                case_info.designer = designer
                case_info.save()
                return JsonResponse({"msg": "新增用例成功", "code": 200})
        else:
            return JsonResponse({"msg": "p_id不能为空", "code": 500})
Пример #15
0
def parse_results_to_jira(url, key, username, password, result_path, issueType = "Bug", environment = "DEV", assignee = ""):
  jira = core.create_jira_connection(url, username, password)

  xmlGlob = glob.glob("{0}/*.xml".format(result_path))
  testResults = ParseResults()

  #HN DEBUG:
  print("xmlGlob:", len(xmlGlob), flush=True)
  for xml in xmlGlob:
    result = ET.parse(xml).getroot()

    for testCase in result.iter('testcases'):
      if testCase.find('error') is not None or testCase.find('Failure') is not None:
        testResults.testcases.append(TestCase.generate_testcase_object(
          environment,
          testCase.attrib.get('classname'),
          testCase.attrib.get('name'),
          testCase.find('error').attrib.get('type') if testCase.find('error') is not None else testCase.find('Failure').get('type'),
          testCase.find('error').text if testCase.find('error') is not None else testCase.find('Failure').text 
        ))
      else:
        testResults.testcases.append(TestCase.generate_testcase_object(
          environment,
          testCase.attrib.get('classname'),
          testCase.attrib.get('name')
        ))
      continue

  #HN DEBUG:
  print("testResults.testcases", len(testResults.testcases), flush=True)
  for testcase in testResults.testcases:
    existingIssues = core.check_for_existing_jira_issue(jira, testcase.title, key, issueType)

    if testcase.description is not None:
      print("existingIssues.count:", existingIssues.count, flush=True)
      if existingIssues.count > 0:
        jira.add_comment(
          existingIssues.results[0],
          "h2. {0}: Test Case Additional Fail\n\n{{code:borderStyle=solid}}{1}{{code}}".format(datetime.datetime.today().strftime("%Y.%m.%d %H:%M"),testcase.description)
        )
        testResults.updatedCount +=1
      else:
        core.create_jira_issue(jira, testcase, key, issueType, environment, assignee)
        testResults.createdCount +=1
    else:
      #HN DEBUG:
      print("testcase.description:", testcase.description, flush=True)
      print("existingIssues.count:", existingIssues.count, flush=True)
      if existingIssues.count > 0:
        for issue in existingIssues.results:
          jira.transition_issue(
            jira.issue(issue),
            #T000: Set up ENUM for Resolution states on defferent issue types, just in case
            '2',
            fields={
              'resolution':{'name':'Closed'}
            }
          )
          testResults.resolvedCount +=1

    existingIssues.results.clear()
    existingIssues.count = 0

  print("""
      JIRA - PROJECT: {0} ({1})
      -------------------------------
      Defects Created: {2}
      Defects Updated: {3}
      Defects Closed: {4}
  """.format(
          jira.project(key).name,
          key,
          testResults.createdCount,
          testResults.updatedCount,
          testResults.resolvedCount 
      )
  )

  return True
Пример #16
0
 def test_insert(self):
     tc= TestCase( self.env, dict(zip(TC_KEYS[1:], self.tcvals)) )
     for a in self.acdicts:
         tc.add_action( TestAction( self.env, a ))
     self.assertTrue(tc.insert() is not None)