WEB UI自动化测试框架搭建(五)_断言,log日志模块

上篇文章实现了数据驱动,接下来对使用数据之后的结果进行判定(先不使用unittest等框架,纯手写)

一.手动断言

加上如下这段代码就是一个简单的断言了。
在这里插入图片描述

根据except_result来判断将要进行的判定:
在这里插入图片描述
如果是登录成功,就判断页面内id为spnUid的元素值是否为用户名
在这里插入图片描述

如果是登录失败,判定下图所取元素的值是否为账号或密码错误。亲测这边使用id定位会报错,所以我用的是xpath来定位。
在这里插入图片描述

判定成功后在字典的最后一位写入结果,不过这里仅仅是写入字典而已,我们应该写入excel。
在这里插入图片描述

在ExcelOperate.py文件中写入一个函数,用以修改excel单元格里的数据,修改完记得用save函数保存一下,否则修改不生效。
在这里插入图片描述

贴一下这部分函数的代码,ExcelOperate.py整个文件的代码在上一篇贴过了,这里不重复贴了。

    def modify_cell(self,row,column,data):
        '''
        在单元格内写入数据
        :param row:
        :param column:
        :param data:
        :return:
        '''
        self.sheet.cell(row=row,column=column).value = data
        self.workbook.save(xlsxPath)

接着在业务层代码里调用一下刚写的这个函数就行了哦。
在这里插入图片描述

测试结果写入成功。
在这里插入图片描述

最后贴一下修改后的LoginCases.py代码:

import time
from selenium import webdriver
from ConfigFiles.ConfigPath import xlsxPath
from Modules.LoginAction import LoginAction
from Utils.ExcelOperate import ExcelOperate
from Utils.fin_ele import find_element


def test_login():
    login_action = LoginAction()
    excelOperate = ExcelOperate()
    excelOperate.load_workbook(xlsxPath)
    excelOperate.get_sheet_by_name('Sheet1')
    #获取最大行数
    row_nums = excelOperate.get_rows_nums()
    #获取第一行的值
    row_1_values = excelOperate.get_row_values(1)
    for i in range(2,row_nums+1):
        row_values = excelOperate.get_row_values(i)
        #第一行与其他行组装成一个字典
        #zip函数将可迭代的两个对象中的对应的元素一一映射并打包成元组,并将所有这些元组放入一个列表中
        values = dict(zip(row_1_values,row_values))
        # is_executed的值为y则代表这行数据要执行
        if values['is_executed'] == 'y':
            username = values['username']
            password = values['password']
            #申明driver
            driver = webdriver.Chrome()
            driver.get('https://mail.163.com/')
            driver.maximize_window()
            login_action.do_login(driver, username, password)
            #判定登录成功
            if values['except_result'] == '登录成功':
                try:
                    if find_element(driver,'id','spnUid').text == 'lsqtester001@163.com':
                        values['test_result'] = '登录成功'
                    excelOperate.modify_cell(i,7,'登录成功')
                except Exception as e:
                    print(e)
            #判定登录失败
            if values['except_result'] == '登录失败':
                try:
                    if find_element(driver,'xpath','/html/body/div[2]/div[2]/div[2]/form/div/div[7]/div[2]').text == '帐号或密码错误':
                        values['test_result'] = '登录失败'
                    excelOperate.modify_cell(i,7,'登录失败')
                except Exception as e:
                    print(e)
            time.sleep(2)
            driver.quit()


if __name__ == '__main__':
    test_login()

二.其他辅助模块

日志模块,每次用例的执行都需要打印相应的日志。
安装loguru模块
在这里插入图片描述
在Utils包下新建一个Logger.py文件,封装打印日志所需要的方法
试着打印一条日志
在这里插入图片描述
这边虽然已经pip install 过loguru这个包了,但这里导入报错。原因如下:
打开file,settings,点击python interpreter,当前项目使用的解释器里并不包含loguru这个包。
在这里插入图片描述
更换一下,换成在python安装目录的那个解释器即可。
在这里插入图片描述
看一下打印效果
在这里插入图片描述
在项目下新建一个包,用来专门存放打印的日志文件,之后的日志记录将会输出到这里
在这里插入图片描述
回到Logger.py,继续完善这个文件
注意这个特殊的写法,代表这个类只能被引用一次,打印日志的类不需要被不停地调用。
在这里插入图片描述
完善一下,将loguru模块里的各个方法在这个文件里封装一下。
在这里插入图片描述
贴一下代码:

import time

from loguru import logger

# logger.debug('this is a debug message')
# logger.info('this is a info message')
# logger.warning('this is a warning message')
# logger.error('this is a error message')
# logger.success('this is a success message')
# logger.critical('this is a critical message')

class Log:

    #单例,运行程序保证只有一个实例
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls,'instance'):
            cls.instance = super(Log,cls).__new__(cls)
        return cls.instance

    def __init__(self):
        '''
        根据时间生成.log文件
        '''
        logger.add('runtime_{}.log'.format(time.time()))

    def debug(self,message):
        logger.debug(message)

    def info(self,message):
        logger.info(message)

    def error(self,message):
        logger.error(message)

    def warning(self,message):
        logger.warning(message)

然后开始在其他文件里使用loguru模块里的方法。
在模块层里尝试使用log功能(也可以在其他文件里,loguru的打印与print没太大区别),打开Modules包下的LoginAction.py文件,加入log打印代码
在这里插入图片描述
运行 一下,成功打印,并根据时间生成.log文件
在这里插入图片描述

我们也可以做如下改动,在包下建一个文件夹专门存放日志。
在这里插入图片描述

我们也可以将log文件创建到别的包下面,哎,就是玩儿^ - ^
在ConfigPath里获取之前创建的包Logging的路径
在这里插入图片描述
再使用上一步获得的logPath变量,对代码进行如下改动
在这里插入图片描述
log日志就打印到一个专门准备的包下面啦,骚不骚
代码不贴了,都是一些很小的改动,都在截图里了。


在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值