Exemple #1
0
 def __init__(self, product, env, db_type='tenant'):
     config_info = ConfigInfo(product, env)
     db_host, db_port, db_user, db_pwd, db_name = config_info.get_mysql_link(
     )
     BaseDB.__init__(self, db_host, db_port, db_user, db_pwd)
     if isinstance(db_name, dict):
         db_name = db_name[db_type]
     self.set_db(db_name)
Exemple #2
0
def pytest_runtest_makereport(item):
    """
    Extends the PyTest Plugin to take and embed screenshot in html report, whenever test fails.
    :param item:
    """
    pytest_html = item.config.pluginmanager.getplugin('html')
    outcome = yield
    report = outcome.get_result()
    # 模块名称,先读取用例文件是否定义module_name,没有则读取用例目录的__init__.py文件
    report.module_name = description_html(
        getattr(item.module, 'module_name', ''))
    if report.module_name == '没有定义':
        report.module_name = description_html(get_module_name(report.nodeid))
    # 用例描述
    report.description = description_html(item.function.__doc__)
    extra = getattr(report, 'extra', [])
    config_info = ConfigInfo()
    product_path = config_info.product_path
    # 用start_run.py执行为一个session,此session目录用于收集每个session的所有报告,便于发送
    if not config_info.__dict__.get('session_id'):
        config_info.session_id = f'{dir_time}_{randint(10, 99)}'

    if report.when == 'call' or report.when == "setup":
        xfail = hasattr(report, 'wasxfail')
        if (report.skipped and xfail) or (report.failed and not xfail):
            create_dir(product_path + '/report')  # 创建report根目录
            create_dir(product_path + '/report/' +
                       config_info.session_id)  # 创建session报告汇总目录
            parent_dir = product_path + '/report/' + config_info.session_id + '/' + dir_time
            create_dir(parent_dir)  # 创建实际报告目录
            abs_img_dir = parent_dir + '/img/'  # 图片绝对路径目录
            create_dir(abs_img_dir)  # 创建图片目录
            img_name = _rename(report.nodeid, replace_type='img') + ".png"
            abs_img_path = abs_img_dir + img_name  # 图片绝对路径,用于保存图片
            rlt_img_path = './img/' + img_name  # 图片相对路径,用于html文件读取
            _capture_screenshot(abs_img_path)  # 截图并保存
            print(report.nodeid)
            if rlt_img_path:
                html = '<div><img src="%s" alt="screenshot" style="width:auto;height:228px;" ' \
                       'onclick="window.open(this.src)" align="right"/></div>' % rlt_img_path
                extra.append(pytest_html.extras.html(html))
        report.extra = extra
    report.nodeid = _rename(report.nodeid, replace_type='report')  # 替换报告节点名称
Exemple #3
0
parser.add_argument('--testsuite', help='测试套文件,如testsuite.yaml,存放目录为./testcase/app,与-m只能同时存在一个')
parser.add_argument('-m', help='用例标记,与pytest -m用法一致,如-m mark1;支持多个标记,如-m "mark1 and mark2",'
                               '与--testsuite只能同时存在一个', metavar='markers')
parser.add_argument('--dir', help='用例目录或用例文件,填写相对路径,起始目录为./产品目录/testcase/app,多个使用空格分隔,'
                                  '如--dir "xcjc clys/test_1.py"')
parser.add_argument('--reruns', help='失败重跑次数,默认为1次', default=1, type=int)
parser.add_argument('--session', help='会话目录,保存报告的父级目录')
parser.add_argument('--batch', help='是否批量运行,默认为0(否)', default=0, type=int)
parser.add_argument('--reset', help='是否重置app,默认1(是)', default=1, type=int)
parser.add_argument('--reinstall', help='是否重新安装app,默认0(否)', default=0, type=int)
parser.add_argument('--start_appium', help='是否自动开启appium服务,默认为0(否)', default=0, type=int)
parser.add_argument('--imp', help='隐式等待时间,默认1秒', default=1, type=int)
args = parser.parse_args()
print(args)

config_info = ConfigInfo(args.product, args.env)  # 注意是单例实例化
product_path = config_info.product_path
app = config_info.get_app()
report_name = config_info.get_report_name()
# 会话目录,不指定时自动生成
if args.session:
    config_info.session_id = args.session
else:
    config_info.session_id = f'{dir_time}_{randint(10, 99)}'

try:
    # 项目
    if not os.path.exists(product_path):
        raise Exception('找不到该路径:%s' % product_path)

    # 设备
Exemple #4
0
from Base.BaseYaml import get_yaml
from Base.BaseConfig import ConfigInfo
from Base.BaseMysql import DbConn
import os

# ————————————————以下项一般不建议修改——————————————————
dir_name = os.path.dirname(__file__)
f = get_yaml(dir_name + '/config.yaml')
product = f['product']
env = f['env']
config_info = ConfigInfo(product, env)
product_path = config_info.product_path
db = DbConn(product, env)


# ————————————————以下项可根据需要增删改——————————————————
def get_user_info(account=None):
    login_info = f['login_info'][env]
    corp_id = login_info['corp_id']
    # 如果指定用户名,则获取指定用户密码,否则获取全部
    u_p_info = login_info['u_p']
    if account:
        if account in u_p_info:
            password = u_p_info[account][0]
            username = u_p_info[account][1]
            return [corp_id, account, password, username]
        else:
            raise KeyError('配置文件不存在该用户名,请检查')
    else:
        result = []
        for account in u_p_info:
Exemple #5
0
        t_file.find('//h1').text = title
        # 文件写入
        t_file.write(save_file)
        print('已生成概览报告')


if __name__ == '__main__':
    try:
        # 找到对应产品刚跑完的报告
        parser = argparse.ArgumentParser()
        parser.add_argument('product', help='产品编码,如移动质检为ydzj,请与产品目录名称保持一致')
        parser.add_argument('parent_dir',
                            help='报告父级目录名,填写相对路径,起始路径为./产品目录/report')
        args = parser.parse_args()
        product, parent_dir = args.product, args.parent_dir
        config_info = ConfigInfo(product=product)
        product_path = config_info.product_path
        session_report_dir = product_path + '/report/' + parent_dir
        f_list = []
        html_files = catch_all_files(session_report_dir, f_list, 'html')

        temp_dir = create_dir(product_path + '/report/temp/')
        temp_dir = create_dir(temp_dir + parent_dir)
        # 通过报告生成概览报告
        overview_file = temp_dir + '/overview.html'
        overview_ins = CreateOverview()
        overview_ins.create_overview(config_info.get_report_name(), html_files,
                                     overview_file)
        # 计算
        pass_rate = overview_ins.pass_rate
Exemple #6
0
                    '如--dir "xcjc clys/test_1.py"')
parser.add_argument('--reruns', help='失败重跑次数,默认为1', default=1, type=int)
parser.add_argument('--session', help='会话目录,保存报告的父级目录')
parser.add_argument('--headless',
                    help='无头模式运行,暂时只支持chrome,默认为0(关闭)',
                    default=0,
                    type=int)
parser.add_argument('--window_size',
                    help='指定浏览器分辨率,默认为"1920,1080"',
                    default="1920,1080")
parser.add_argument('--max_window', help='窗口最大化,默认为1(开启)', default=1, type=int)
parser.add_argument('--imp', help='隐式等待时间,默认1秒', default=1, type=int)
args = parser.parse_args()
print(args)

config_info = ConfigInfo(args.product, args.env)
product_path = config_info.product_path
init_url = config_info.get_init_url()
report_name = config_info.get_report_name()
# 会话目录,不指定时自动生成
if args.session:
    config_info.session_id = args.session
else:
    config_info.session_id = f'{dir_time}_{randint(10, 99)}'

try:
    # 项目
    if not os.path.exists(product_path):
        raise Exception('找不到该路径:%s' % product_path)

    # 启动浏览器