示例#1
0
def run_case():
    logger.debug("进入unittest")

    class TC102(unittest.TestCase):
        """用例描述"""

        @classmethod
        def setUpClass(cls):
            """ 这里放需要在所有用例执行前执行的部分"""
            pass

        def setUp(self):
            logger.info('测试测试用例')
            """这里放需要在每条用例前执行的部分"""
            pass

        def test_demo(self):
            """点击微信登录"""
            pass

        def tearDown(self):
            """这里放需要在每条用例后执行的部分"""
            sleep(5)

        @classmethod
        def tearDownClass(cls):
            u"""这里放需要在所有用例后执行的部分"""
            pass

    # 调试测试类下所有方法
    srcSuite = unittest.TestLoader().loadTestsFromTestCase(TC102)
    # 调试测试类下某个方法
    # srcSuite = TC101("test_login")
    return srcSuite
示例#2
0
def query_model_during_export(db_obj, model):
    """Retrieves query for existing columns of the table modified.

     During DB setup, newly added column throw error on querying. Those
     columns need to be skipped while querying.

     Doesn't export deleted campaigns.

     Args:
        db_obj: instance of DatabaseAPI
        model: instance of DB table

    Returns:
        All the results of the query.
    """
    except_cols = list()
    tbl_name = model.__tablename__
    while True:
        try:
            rows = db_obj.db_session.query(
                *[c for c in model.__table__.c if c.name not in
                  except_cols])
            rows = rows.all()
        except (TypeError, OperationalError) as e:
            if 'Unknown database' in e.message:
                raise e
            logger.debug(e.message)
            col_name = search(r"%s\.(.+?)'" % tbl_name, e.message).group(1)
            logger.info("Skipping new column %s", col_name)
            except_cols.append(col_name)
        else:
            return rows
示例#3
0
def run_case(devices, poco):
    logger.debug("{}进入unittest".format(devices))
    package = Madb(devices).get_packagename()

    class TC101(unittest.TestCase):
        """用例描述"""
        @classmethod
        def setUpClass(cls):
            """ 这里放需要在所有用例执行前执行的部分"""
            wake()

        def setUp(self):
            """这里放需要在每条用例前执行的部分"""
            start_app(package)
            sleep(2)

        def test_login(self):
            """点击微信登录"""
            pass
            # logger.info('执行1')
            # poco(text='微信登录').click()

        def test_demo2(self):
            """点击手机号登录"""
            pass
            # logger.info('执行2')
            # poco(text='手机号登录').click()
            # pass

        def test_demo3(self):
            """touch使用"""
            pass
            # logger.info('执行test_demo3')
            # touch(Template('{}/login_on.png'.format(case_img)))

        def tearDown(self):
            """这里放需要在每条用例后执行的部分"""
            sleep(5)
            stop_app(package)

        @classmethod
        def tearDownClass(cls):
            u"""这里放需要在所有用例后执行的部分"""
            pass

    # 调试测试类下所有方法
    # srcSuite = unittest.TestLoader().loadTestsFromTestCase(TC101)
    # 调试测试类下某个方法
    srcSuite = TC101("test_login")
    return srcSuite
示例#4
0
def run_case(driver: AutoWeb, url):
    logger.debug("进入unittest")

    class TC101(unittest.TestCase):
        """用例描述"""

        @classmethod
        def setUpClass(cls):
            """ 窗口最大化并访问测试网页地址"""
            driver.maximize_window()
            driver.get(url)
            driver.find_element_by_xpath("//*[@type='text']").send_keys('zwq')
            driver.find_element_by_xpath("//*[@type='password']").send_keys('situ1234')
            driver.airtest_touch(Template('{}/login_on.png'.format(case_path)))

        def setUp(self):
            """这里放需要在每条用例前执行的部分"""
            pass

        @classmethod
        def test_login(cls):
            """点击微信登录"""
            logger.info('测试登录')
            pass

        def test_demo2(self):
            """点击手机号登录"""
            pass

        def test_demo3(self):
            """touch使用"""
            pass

        def tearDown(self):
            """这里放需要在每条用例后执行的部分"""
            sleep(1)

        @classmethod
        def tearDownClass(cls):
            """关闭浏览器"""
            time.sleep(1)
            driver.quit()

    # 调试测试类下所有方法
    # srcSuite = unittest.TestLoader().loadTestsFromTestCase(TC101)
    # 调试测试类下某个方法
    srcSuite = TC101("test_login")
    return srcSuite
示例#5
0
def recreate_db():
    """Drop and create DB using latest model definitions"""
    logger.debug(db_settings)
    db_obj = MySQLConnection(**db_settings)
    db_obj.connect()
    cursor = db_obj.cursor()
    drop_all = "DROP DATABASE IF EXISTS %s;"
    logger.info('Dropping database')
    cursor.execute(drop_all % options.db_name)
    db_settings.update({'db': options.db_name})
    logger.info('Creating database')
    cursor.execute(
        """CREATE DATABASE IF NOT EXISTS %(db)s
           DEFAULT CHARACTER SET %(charset)s
           DEFAULT COLLATE %(collation)s;""" % db_settings)
    cursor.close()
    with DatabaseAPI() as db_api:
        db_api.create_tables()
示例#6
0
 def InputEvent(self):
     devices = self.get_mdevice()
     logger.info("设备{}开始进行自动处理权限".format(devices))
     # 获取andorid的poco代理对象,准备进行开启安装权限(例如各个品牌的自定义系统普遍要求的二次安装确认、vivo/oppo特别要求的输入手机账号密码等)的点击操作。
     pocoAndroid = AndroidUiautomationPoco(use_airtest_input=True,
                                           screenshot_each_action=False)
     # 这里是针对不同机型进行不同控件的选取,需要用户根据自己的实际机型实际控件进行修改
     n = self.get_iteration()
     # 先实现功能,以后有空参数化函数
     if devices == "172.16.6.82:7425":
         count = 0
         # 找n次或找到对象以后跳出,否则等5秒重试。
         while True:
             logger.debug("{}安装应用的权限点击,循环第{}次".format(devices, count))
             if count >= n:
                 logger.debug("{}退出InputEvent线程".format(devices))
                 break
             if pocoAndroid("com.coloros.safecenter:id/et_login_passwd_edit"
                            ).exists():
                 pocoAndroid(
                     "com.coloros.safecenter:id/et_login_passwd_edit"
                 ).set_text("123456")
                 time.sleep(2)
                 if pocoAndroid("android.widget.FrameLayout").offspring(
                         "android:id/buttonPanel").offspring(
                             "android:id/button1").exists():
                     pocoAndroid("android.widget.FrameLayout").offspring(
                         "android:id/buttonPanel").offspring(
                             "android:id/button1").click()
                 break
             else:
                 time.sleep(5)
             count += 1
     elif devices == "127.0.0.1:62025":
         count = 0
         while True:
             logger.debug("{}安装应用的权限点击,循环第{}次".format(devices, count))
             if count >= n:
                 break
             if pocoAndroid(
                     "com.android.packageinstaller:id/continue_button"
             ).exists():
                 pocoAndroid(
                     "com.android.packageinstaller:id/continue_button"
                 ).click()
             else:
                 time.sleep(5)
             count += 1
示例#7
0
	def send(self, params=None, data=None, **kwargs):
		response = self.session.request(method=self.method, url=self.url, params=params, data=data, **kwargs)
		response.encoding = 'utf-8'
		logger.debug('{0} {1}'.format(self.method, self.url))
		logger.debug('请求成功:{0}\n{1}'.format(response, response.text))
		return response
示例#8
0
文件: index.py 项目: liucong233/UI
def main():
    # 默认去config.ini里读取期望参与测试的设备,若为空,则选择当前连接的所有状态为“device”的设备
    devicesList = Madb().get_devicesList()
    if devicesList[0] == "":
        devicesList = Madb().getdevices()
    logger.info("最终的devicesList={}".format(devicesList))
    if Madb().get_apkpath() == "" or Madb().get_packagename() == "":
        logger.error("配置文件填写不全,packagename和apkpath是必填项")
        devicesList = None
    # 读取是否跳过发送邮件
    skip_email_flag = Madb().get_skip_email()
    skip_email = True if skip_email_flag == '1' else False
    # 读取是否需要同步性能测试的配置。
    skip_performance = Madb().get_skip_performance()
    skip_performance = True if skip_performance == "1" else False
    is_storaged_by_excel = Madb().get_storage_by_excel()
    is_storaged_by_excel = True if is_storaged_by_excel == "1" else False
    reportpath = os.path.join(os.getcwd(), "Report")
    # 没有Report目录时自动创建
    if not os.path.exists(reportpath):
        os.mkdir(reportpath)
        os.mkdir(reportpath + "/Screen")
        logger.debug(reportpath)
    logger.info("测试开始")
    if devicesList:
        try:
            logger.info("启动进程池")
            # 进程池
            p_list = []
            # 根据设备列表去循环创建进程,对每个进程调用下面的enter_processing/enter_enter_performance方法。
            for i in range(len(devicesList)):
                # start会被传递到2个进程函数里,作为区分最终产物html和excel的标志
                start = time.localtime()
                madb = Madb(devicesList[i])
                if madb.get_androidversion() < 5:
                    logger.error("设备{}的安卓版本低于5,不支持。".format(
                        madb.get_mdevice()))
                    continue
                else:
                    # 进程通信变量flag,默认为0,完成测试时修改为1。
                    flag = Value('i', 0)
                    if not skip_performance:
                        pro1 = Process(target=enter_performance,
                                       args=(madb, flag, start,
                                             is_storaged_by_excel))
                        p_list.append(pro1)
                pro2 = Process(target=enter_processing,
                               args=(
                                   i + 1,
                                   madb,
                                   flag,
                                   start,
                               ))
                p_list.append(pro2)
            for p1 in p_list:
                p1.start()
            for p2 in p_list:
                p2.join()
            logger.info("进程回收完毕")
            logger.info("测试结束")
        except AirtestError:
            logger.error("Airtest发生错误" + traceback.format_exc())
        except PocoException:
            logger.error("Poco发生错误" + traceback.format_exc())
        except Exception:
            logger.error("发生未知错误" + traceback.format_exc())
    else:
        logger.error("未找到设备,测试结束")
    # 判断是否发送邮件
    if not skip_email:
        try:
            Email().send_email()
        except Exception:
            logger.error(traceback.format_exc())
    else:
        logger.info('跳过发送邮件')
    def confirmOrderItems(self, orderItems: list):
        """
        直接提交订单

        :param orderItem:商品数据对象
        :return: 商品数量修改结果 True/False
        """
        # TODO: 这是页面的访问 找到json的请求接口
        url = "https://wq.jd.com/deal/confirmorder/main"
        commlist = []
        for orderItem in orderItems:
            comm = f"{orderItem.pid},,{orderItem.count},{orderItem.pid},{orderItem.selectPromotion},,0"
            commlist.append(comm)

        print(commlist)

        # 选择item提交
        payload = {
            "commlist": '$'.join(commlist),
            "cu": "true",
            "utm_source": "kong",
            "utm_medium": "jingfen",
            "utm_campaign": "t_1002950757_"
        }

        headers = {
            'User-Agent': self.user_agent,
            "Origin": "https://p.m.jd.com",
            "Referer": "https://p.m.jd.com/"
        }
        logger.debug("1")
        resp = self.sess.get(url, params=payload, headers=headers)
        logger.debug("2")
        try:

            pattern = re.compile(r"\"order\":(.*),\s+\"orderPromotion",
                                 re.MULTILINE | re.DOTALL)
            # dealData = pattern.search(resp.text).group(1)
            try:
                dealData = demjson.decode(
                    str(pattern.search(resp.text).group(1)))
            except Exception as e:
                return
            venderCart = dealData.get("venderCart")
            self.submitOrderExtraData["traceId"] = dealData.get("traceId")
            self.submitOrderExtraData["token2"] = dealData.get("token2")
            self.submitOrderExtraData["skulist"] = dealData.get("skulist")

            flag = True

            def _parse_product(products):
                for product in products:
                    mainSku = product.get("mainSku")

                    if int(product.get("mainSku").get("outOfStock")) == 0:
                        continue
                    else:
                        sku_id = mainSku.get("id")
                        sku_name = mainSku.get("name")
                        logger.error(f"订单中{sku_id}:{sku_name}无货!")
                        return False
                return True

            for vender in venderCart:
                if vender.get("products"):
                    flag = _parse_product(vender.get("products")) and flag
                if vender.get("mfsuits"):
                    for _item in vender.get("mfsuits"):
                        flag = _parse_product(_item.get("products")) and flag
                if vender.get("mzsuits"):
                    for _item in vender.get("mzsuits"):
                        flag += _parse_product(_item.get("products")) and flag
            if flag:
                logger.debug("3")
                logger.info("选择Order成功")
                return True
        except Exception as e:
            logger.error(traceback.format_exc())
        logger.debug("3")
        logger.error("选择Order失败")
        return False