selenium+python 完整自动化测试脚本及讲解(三、utils包介绍)

selenium + python 完整自动化测试脚本及讲解(三、utils包介绍)

  补更,求关注!!!
在这里插入图片描述
在这里插入图片描述

简介

文件名介绍
DEPENDON_.py解决 unittest 每个case的依赖关系
HTML_REPORT.py生成HTML测试结果报告
OUTER_TOOLS.py封装一些重复调用的函数
PROPERTIES_TOOLS.py读取.properties文件信息
SENDKYES.py模拟键盘按钮
UPLOAD_FILE_TOOLS.py封装文件上传方法

DEPENDON_.py

import functools
import unittest

"""
目前仅解决一个Case依赖另一个 Case 的关系,后续更新后会特意发布一篇文章
"""
def dependon(depend=None):  # 定义一个 装饰器 参数 被依赖的函数名称
    def wraper_func(test_func):  # 默认传参:被修饰的函数
        @functools.wraps(test_func)
        def inner_func(self):  # 判断函数
            if depend == test_func.__name__:  # 判断依赖的函数,是否和自身是否是一个函数
                raise ValueError("{} cannot depend on itself".format(depend))
            failures = str([fail[0] for fail in self._outcome.result.failures])  # 获得所有断言失败的函数
            errors = str([error[0] for error in self._outcome.result.errors])  # 获得所有发生错误的函数
            skipped = str([error[0] for error in self._outcome.result.skipped])  # 获得所有已经跳过的函数
            flag = (depend in failures) or (depend in errors) or (depend in skipped)  # 判断依赖的函数是否在发生错误的函数中
            test = unittest.skipIf(flag, 'Skip because def:{} is not running'.format(depend))(
                test_func)  # 交给unittest.skipIf函数处理
            return test(self)  # 返回 unittest.skipIf 处理结果

        return inner_func  # 返回 inner_func 处理结果

    return wraper_func  # 返回 wraper_func 处理结果

  有点时间没看了,看着有点晕,但是保证代码是可用的。

OUTER_TOOLS.py

# -*- coding: utf-8 -*-
import os

from utils.OUTER_TOOLS import get_abspath


class Properties(object):
    """
        读取配置文件信息,组成 key:value的形式保存在 properties dict变量中
    """

    def __init__(self, FileName=None):
        self.properties = {}
        if FileName is None:
            self.fileName = get_abspath() + "\config\init.properties"
        else:
            self.fileName = FileName

    def __getDict(self, strName, dictName, value):
        if strName.find('.') > 0:
            k = strName.split('.')[0]
            dictName.setdefault(k, {})
            return self.__getDict(strName[len(k) + 1:], dictName[k], value)
        else:
            dictName[strName] = value
            return

    def getProperties(self):
        try:
            pro_file = open(self.fileName, 'r')
            for line in pro_file.readlines():
                line = line.strip().replace('\n', '')
                if line.find("#") != -1:
                    line = line[0:line.find('#')]
                if line.find('=') > 0:
                    strs = line.split('=')
                    strs[1] = line[len(strs[0]) + 1:]
                    self.__getDict(strs[0].strip(), self.properties, strs[1].strip())
        except Exception:
            raise
        else:
            pro_file.close()
        return self.properties


# 将结果公开出来
dictProperties = Properties().getProperties()


# 为了防止调用时出错,获取数据时请使用这个函数
def getProperties(key):
    if key not in dictProperties.keys():
        return ""
    return dictProperties[key]

  可以说这个是整个项目的核心方法了,70% 的文件用到了这个类,所以修改可以,但是其他程序报错,我也没办了!

SENDKYES.py

-- coding: utf-8 --

import time
import win32api
import win32con
import pyperclip


def sendKeys_ON(Key, number=1, P1=0, P2=0, P3=0):
    """
    模拟键盘按键
    :param Key: 发送的按钮
    :param number: 发送次数
    :param P1:
    :param P2:
    :param P3:
    :return:
    从原型可以看出,Keybd_event()共有四个参数:
       第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);
       第二个参数为扫描码,一般不用设置,用0代替就行;
       第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";
       第四个参数一般也是置0即可。
       win32api.keybd_event(Key, P1, P2, P3)
             字母和数字键 数字小键盘的键功能键 其它键

    """
    for num in range(number):
        win32api.keybd_event(Key, P1, P2, P3)  # (回车)
        win32api.keybd_event(Key, P1, win32con.KEYEVENTF_KEYUP, P3)
        time.sleep(.5)


pass

  附赠:键盘码表

键码键码键码键码键码
048A65096F1112Backspace8
149B66197F2113Tab9
250C67298F3114Clear12
351D68399F4115Enter13
452E694100F5116Shift16
553F705101F6117Control17
654G716102F7118Alt18
755H727103F8119Caps Lock20
856I738104F9120Esc27
957J749105F10121Spacebar32
K75*106F11122Page Up33
L76+107F12123Page Down34
M77Enter}108End35
N78-09Home36
O79.10Left Arrow37
P80/11Up Arrow38
Q81–Right Arrow39
R82–Down Arrow40
S83–Insert45
T84–Delete46
U85–Help47
V86–Num Lock144
W87
X88
Y89
Z90

UPLOAD_FILE_TOOLS.py

  文件内容太多:另写一篇:https://blog.csdn.net/weixin_43664254/article/details/90437478

HTML_REPORT.py

  文件内容太多:另写一篇:https://blog.csdn.net/weixin_43664254/article/details/90515098
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值