Ejemplo n.º 1
0
    def run(self, request, *args, **kwargs):
        # 取出并构造参数
        instance = self.get_object()
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        env_id = serializer.validated_data.get('env_id')
        env = Envs.objects.get(id=env_id)

        testcase_dir_path = os.path.join(
            settings.SUITES_DIR,
            datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))
        # 创建一个以时间戳命名的路径
        os.mkdir(testcase_dir_path)

        include = eval(instance.include)
        if len(include) == 0:
            data = {'ret': False, 'msg': '此套件下未添加接口, 无法运行'}
            return Response(data, status=400)

        # 将include中的接口id转化为此接口下的用例id
        include = get_testcases_by_interface_ids(include)
        for testcase_id in include:
            testcase_obj = Testcases.objects.filter(id=testcase_id).first()
            if testcase_obj:
                common.generate_testcase_file(testcase_obj, env,
                                              testcase_dir_path)

        return common.run_testcase(instance, testcase_dir_path)
Ejemplo n.º 2
0
 def run(self, request, *args, **kwargs):
     # 取出并构造参数
     instance = self.get_object()
     response = super().create(request, *args, **kwargs)
     env_id = response.data.serializer.validated_data.get('env_id')
     testcase_dir_path = os.path.join(
         settings.SUITES_DIR,
         datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))
     # 创建一个以时间戳命名的路径
     os.mkdir(testcase_dir_path)
     env = Envs.objects.filter(id=env_id).first()
     interfaces_qs = Interfaces.objects.filter(instance)
     # 判断查询集对象是否为空
     if not interfaces_qs.exists():
         data = {'ret': False, 'msg': '该项目下无接口存在,无法运行'}
         return Response(data, status=400)
     # 遍历所有可运行用例,并转化为列表
     runner_testcases_obj = []
     for interfaces_obj in interfaces_qs:
         testcase_qs = Testcases.objects.filter(interface=interfaces_obj)
         if testcase_qs.exists():
             runner_testcases_obj.extend(list(testcase_qs))
     if len(runner_testcases_obj) == 0:
         data = {'ret': False, 'msg': '该项目下无用例存在,无法运行'}
         return Response(data, status=400)
     for testcase_obj in runner_testcases_obj:
         # 生成yaml用例文件
         common.generate_testcase_file(testcase_obj, env, testcase_dir_path)
     # 运行用例(生成报告)
     common.run_testcase(instance, testcase_dir_path)
Ejemplo n.º 3
0
    def run(self, request, *args, **kwargs):
        # 1、取出接口的模型对象
        instance = self.get_object()
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        env_id = serializer.validated_data.get('env_id')
        env = Envs.objects.get(id=env_id)

        # 2、创建一个以时间戳命名的目录
        testcase_dir_path = os.path.join(settings.SUITES_DIR, datetime.strftime(datetime.now(), "%Y%m%d%H%M%S"))
        os.mkdir(testcase_dir_path)

        # 3、获取当前接口下的所有用例
        testcase_qs = Testcases.objects.filter(interface=instance)

        if not testcase_qs.exists():  # 如果此接口下没有用例, 则无法运行
            data = {
                'ret': False,
                'msg': '此接口下无用例, 无法运行'
            }
            return Response(data, status=400)

        for testcase_obj in testcase_qs:
            # 4、生成用例的yaml配置文件
            common.generate_testcase_file(testcase_obj, env, testcase_dir_path)

        # 5、运行用例并生成测试报告
        return common.run_testcase(instance, testcase_dir_path)
Ejemplo n.º 4
0
    def run(self, request, *args, **kwargs):
        # 取出并构造参数
        instance = self.get_object()
        response = super().create(request, *args, **kwargs)
        env_id = response.data.serializer.validated_data.get('env_id')
        testcase_dir_path = os.path.join(
            settings.SUITES_DIR,
            datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))
        # 创建一个以时间戳命名的路径
        os.mkdir(testcase_dir_path)
        env = Envs.objects.filter(id=env_id).first()

        testsuit_include = json.loads(instance.include, encoding='utf-8')
        testcases_qs_list = []
        for interface_id in testsuit_include:
            testcases_qs = Testcases.objects.filter(interface_id=interface_id)
            testcases_qs_list.extend(list(testcases_qs))

        if len(testcases_qs_list) == 0:
            data = {'ret': False, 'msg': '此套件下无用例,无法运行'}
            return Response(data, status=400)

        for testcase_obj in testcases_qs_list:
            # 生成yaml用例文件
            common.generate_testcase_file(testcase_obj, env, testcase_dir_path)

        # 运行用例(生成报告)
        return common.run_testcase(instance, testcase_dir_path)
Ejemplo n.º 5
0
    def run(self, request, *args, **kwargs):
        instance = self.get_object()
        env, testcase_dir = common.get_env_dir(
            self.get_serializer(data=request.data))

        # 3、创建用例运行的yaml文件
        testcases_qs = Testcases.objects.filter(interface=instance.id)
        for testcase_obj in testcases_qs:
            common.generate_testcase_file(testcase_obj, env, testcase_dir)

        # 4、运行测试用例并生成报告
        return yb_run_testcase.delay(instance, testcase_dir)
Ejemplo n.º 6
0
 def run(self, request, *args, **kwargs):
     # 取出并构造参数
     instance = self.get_object()
     response = super().create(request, *args, **kwargs)
     env_id = response.data.serializer.validated_data.get('env_id')
     testcase_dir_path = os.path.join(
         settings.SUITES_DIR,
         datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))
     # 创建一个以时间戳命名的路径
     os.mkdir(testcase_dir_path)
     env = Envs.objects.filter(id=env_id).first()
     # 生成yaml用例文件
     common.generate_testcase_file(instance, env, testcase_dir_path)
     # 运行用例(生成报告)
     common.run_testcase(instance, testcase_dir_path)
Ejemplo n.º 7
0
    def run(self, request, *args, **kwargs):
        instance = self.get_object()
        # 2、创建目录
        env, testcase_dir = common.get_env_dir(self.get_serializer(data=request.data))

        # 3、创建用例运行需要的yaml文件
        interface_qs = Interfaces.objects.filter(project=instance.id)
        for interface_obj in interface_qs:
            testcases_qs = Testcases.objects.filter(interface=interface_obj.id)
            for testcases_obj in testcases_qs:
                common.generate_testcase_file(testcases_obj, env, testcase_dir)

        # 4、运行测试用例并生成报告
        # 使用异步框架celery,方法使用delay调用
        return yb_run_testcase.delay(instance, testcase_dir)
Ejemplo n.º 8
0
    def run(self, request, *args, **kwargs):
        instance = self.get_object()
        env, testcase_dir = common.get_env_dir(
            self.get_serializer(data=request.data))

        # 3、创建用例运行的yaml文件
        testcase_l = Testcases.objects.filter(id__in=eval(instance.include))
        for testcase_obj in testcase_l:
            common.generate_testcase_file(testcase_obj, env, testcase_dir)

        # 4、运行httprunner
        run_task = yb_run_testcase.delay(instance, testcase_dir)
        # 测试作用,使用异步接口,但是前端没有做相应调整
        time.sleep(5)
        if run_task.status == 'SUCCESS':
            report_id = run_task.result
            return Response({'id': report_id}, status=201)
Ejemplo n.º 9
0
    def run(self, request, *args, **kwargs):
        # 取出并构造参数
        instance = self.get_object()
        # serializer = self.get_serializer(data=request.data)
        # serializer.is_valid(raise_exception=True)
        response = super().create(request, *args, **kwargs)
        env_id = response.data.serializer.validated_data.get('env_id')
        testcase_dir_path = os.path.join(
            settings.SUITES_DIR,
            datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))

        env = Envs.objects.filter(id=env_id).first()
        # 生成yaml用例文件
        common.generate_testcase_file(instance, env, testcase_dir_path)

        # 运行用例(生成报告)
        pass
Ejemplo n.º 10
0
    def run(self, request, *args, **kwargs):
        # 1、取出用例、env的模型对象
        instance = self.get_object()
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        env_id = serializer.validated_data.get('env_id')
        env = Envs.objects.get(id=env_id)

        # 2、创建一个以时间戳命名的目录
        testcase_dir = os.path.join(settings.SUITES_DIR, datetime.strftime(datetime.now(), "%Y%m%d%H%M%S"))
        os.makedirs(testcase_dir)

        # 3、创建yaml用例文件
        common.generate_testcase_file(instance=instance, env=env, testcase_dir=testcase_dir)

        # 4、运行用例并生成测试报告
        return yb_run_testcase.delay(instance, testcase_dir)
Ejemplo n.º 11
0
    def run(self, request, *args, **kwargs):
        # 取出并构造参数
        instance = self.get_object()
        response = super().create(request, *args, **kwargs)
        env_id = response.data.serializer.validated_data.get('env_id')
        testcase_dir_path = os.path.join(
            settings.SUITES_DIR,
            datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))
        # 创建一个以时间戳命名的路径
        os.mkdir(testcase_dir_path)
        env = Envs.objects.filter(id=env_id).first()

        testcase_objs = Testcases.objects.filter(interface=instance)
        if not testcase_objs.exists():  # 如果此接口下没有用例, 则无法运行
            data = {'ret': False, 'msg': '此接口下无用例, 无法运行'}
            return Response(data, status=400)

        for one_obj in testcase_objs:
            common.generate_testcase_file(one_obj, env, testcase_dir_path)

        # 运行用例
        return common.run_testcase(instance, testcase_dir_path)
Ejemplo n.º 12
0
    def run(self, request, *args, **kwargs):
        # 取出并构造参数
        instance = self.get_object()
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        env_id = serializer.validated_data.get('env_id')
        env = Envs.objects.get(id=env_id)

        testcase_dir_path = os.path.join(
            settings.SUITES_DIR,
            datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f'))
        # 创建一个以时间戳命名的路径
        os.mkdir(testcase_dir_path)

        interface_qs = Interfaces.objects.filter(project=instance)
        if not interface_qs.exists():
            data = {'ret': False, 'msg': '此项目下无接口,无法运行'}
            return Response(data, status=400)

        runnable_testcase_obj = []
        for interface_obj in interface_qs:
            # 当前接口项目的用例所在查询集对象
            testcase_qs = Testcases.objects.filter(interface=interface_obj)
            if testcase_qs.exists():
                # 将两个列表合并
                runnable_testcase_obj.extend(list(testcase_qs))

        if len(runnable_testcase_obj) == 0:
            data = {'ret': False, 'msg': '此项目下无用例,无法运行'}
            return Response(data, status=400)

        for testcase_obj in runnable_testcase_obj:
            # 生成yaml用例文件
            common.generate_testcase_file(testcase_obj, env, testcase_dir_path)

        # 运行用例(生成报告)
        return common.run_testcase(instance, testcase_dir_path)