import time
import traceback
from HTMLTestReportCN2 import DirAndFiles
from functools import wraps
from selenium.common.exceptions import WebDriverException

from conf.base_page import BasePage
from conf.report_path import ReportPath
from conf.log import Log
from utils.wxapp import AppletUtil

flag = 'IMAGE:'
log = Log()
IS_APPLET = True


def screenshot(error_type):
    report_path = ReportPath().get_path()
    driver = BasePage().get_driver()
    img_name = DirAndFiles(report_path).get_screenshot(driver, error_type)
    print('screen_shot[' + error_type + "--" + img_name + ']screen_shot\n')
    return img_name


def switch_app_catch_pic():
    driver = BasePage().get_driver()
    if IS_APPLET:
        AppletUtil.switch_operate(driver, switch_to_app=True)


def teststep(func: object) -> object:
示例#2
0
    def _run_cases(server_url, run, cases):
        log = Log()
        log.set_logger(run.get_device()['deviceName'], run.get_path() + '\\' + 'client.log')

        log.i('platformName: %s', run.get_device()['platformName'])
        log.i('platformVersion: %s', run.get_device()['platformVersion'])
        log.i('deviceName: %s', run.get_device()['deviceName'])
        log.i('app: %s', run.get_device()['app'])
        # log.i('package: %s', run.get_device()['package'])
        # log.i('appActivity: %s', run.get_device()['appActivity'])
        # log.i('noReset: %s', run.get_device()['noReset'])
        log.i('appium server port: %d\n', run.get_port())

        addr = "http://%s:%s/wd/hub" % (server_url['hostname'], server_url['port'])
        remote = run.get_device()
        # init driver
        driver = webdriver.Remote(addr, remote)

        # set cls.driver, it must be call before operate on any page
        base_page = BasePage()
        base_page.set_driver(driver)

        login_status = LoginStatus()
        login_status.set_status(False)

        # set cls.path, it must be call before operate on any page
        path = ReportPath()
        path.set_path(run.get_path())

        try:
            time.sleep(5)
            print('start cases')
            run.run(cases)
            print('end')
        except AssertionError as e:
            log.e('AssertionError, %s', e)

        # quit driver
        driver.quit()
示例#3
0
    def start_driver(case_info, pro_name):
        opt = webdriver.ChromeOptions()
        opt.add_experimental_option(
            "prefs",
            {"profile.default_content_setting_values.media_stream_mic": 1})
        driver = webdriver.Chrome(chrome_options=opt)
        driver.maximize_window()
        driver.get(gv.BASE_URL)
        run = RunCases(pro_name)
        log = Log()
        log.set_logger(pro_name, run.get_path() + '\\' + 'client.log')
        log.i('测试项目:' + pro_name)
        log.i('测试工具:selenium')
        log.i('输出报告:' + str(run.get_path()) + '\n')

        base_page = BasePage()
        base_page.set_driver(driver)
        #
        path = ReportPath()
        path.set_path(run.get_path())  #
        sql = SqlDb()
        try:
            sql.start_db()
            time.sleep(3)
            run.create_report(case_info)
            driver.quit()
        except AssertionError as e:
            log.e('AssertionError, %s', e)
            print(e)
            driver.quit()
        sql.close_db()
示例#4
0
    def appium_desired(self, device_name, android_version, port, run, cases):
        clear_cmd = 'adb -s ' + device_name + ' shell pm clear com.vanthink.student.debug'
        os.system(clear_cmd)

        android = {
            "newCommandTimeout": 3600,
            'platformName': 'Android',
            'deviceName': device_name,
            'package': 'com.vanthink.student.debug',
            'platformVersion': android_version,
            'port': port,
            'systemPort': port + 10,
            'app': gv.PATH(gv.PACKAGE),
            "automationName": "UiAutomator2",
            "unicodeKeyboard": True,
            "resetKeyboard": True,
            "noReset": True
        }
        log = Log()
        log.set_logger(device_name, run.get_path() + '\\' + 'client.log')
        log.i('platformName: %s', android['platformName'])
        log.i('platformVersion: %s', android_version)
        log.i('deviceName: %s', device_name)
        log.i('app: %s', android['app'])
        log.i('appium server port: %d\n', port)

        addr = "http://127.0.0.1:%s/wd/hub" % port
        driver = webdriver.Remote(addr, android)
        base_page = BasePage()
        mysql = SqlDb()
        mysql.start_db()
        base_page.set_db(mysql)

        # 驱动driver 设置
        base_page.set_driver(driver)
        login_status = LoginStatus()
        login_status.set_status(False)

        # set cls.path, it must be call before operate on any page
        path = ReportPath()
        path.set_path(run.get_path())
        print('start cases')
        run.run_httprunner(cases)
        print('end')
        driver.quit()
        return driver
示例#5
0
 def __init__(self):
     self.db = None
     self.cursor = None
     self.logger = Log()
示例#6
0
class MyDBOperate:
    """数据库操作"""

    def __init__(self):
        self.db = None
        self.cursor = None
        self.logger = Log()

    @teststeps
    def connectDB(self):
        """连接数据库"""
        try:
            config = {
                'host': str(gv.DB_HOST),
                'user': gv.DB_USERNAME,
                'passwd': gv.DB_PASSWORD,
                'port': int(gv.DB_PORT),
                'db': gv.DB_DATABASE,
                'charset': gv.DB_CHARSET
            }
            # connect to DB
            self.db = pymysql.connect(config)
            # create cursor
            self.cursor = self.db.cursor()
            print("Connect DB successfully!")
        except ConnectionError as ex:
            self.logger.e(str(ex))

    @teststeps
    def execute_sql(self, sql):
        """执行SQL语句"""
        self.connectDB()
        try:
            # executing sql
            self.cursor.execute(sql)
            # executing by committing to DB
            self.db.commit()
            self.close_db()
            return self.cursor
        except:
            # 发生错误时回滚
            self.db.rollback()
            print('❌❌❌ Error - 执行SQL语句发生错误,回滚数据库')

    @teststeps
    def get_one(self, sql):  # 根据解释/单词查询指定单词/解释
        result = 0
        try:
            self.execute_sql(sql)
            result = self.cursor.fetchone()
        except:
            print("❌❌❌ Error - unable to fetch data.json!!")
        self.db.close()
        return result

    @teststeps
    def get_all_word(self, sql):
        """获取所有数据"""

        results = 0
        try:
            self.execute_sql(sql)
            results = self.cursor.fetchall()
        except:
            print("❌❌❌ Error - unable to fetch all data.json!!")
        self.db.close()
        return results

    @teststeps
    def close_db(self):
        """关闭数据库"""
        self.db.close()
        print("Database closed!")