Python3学习笔记_web自动化基础十三_20200801

Python3学习笔记_web自动化基础十三_20200801

Python经典循环导入问题:
多个模块互相调用的时候,避免互相调用造成死循环的问题,
如果真的有两个模块要互相调用,可以将导入的代码写到函数里面,不写到模块开头
对于异常的处理,加日志记录
方法1:直接写到定义的方法里,使用系统自带的find_element,这样的话比较繁琐,凡事使用系统自带的find_element都要单独写异常处理,太麻烦
     def enter_username(self,username):
         try:
            self.driver.find_element(*self.username_locator1).send_keys(username)
         except:
             HandlerAll.logger.error('元素找不到{}'.format(self.username_locator1))
         return self

方法2:封装好一个find_element
    def find_element(self,locator):
        '''查找元素'''
        try:
            el=self.driver.find_element(*locator)
            return el
        except:
            HandlerAll.logger.error('元素找不到{}'.format(locator))

    #在方法里面调用:去掉了driver,使对象发生了变化,这样来区分是系统自带的还是自己封装的
    def enter_username(self,username):
        self.find_element(*self.username_locator1).send_keys(username)
        return self

方法3:使用异常处理的装饰器,自己定义一个异常处理的装饰器,然后直接在要使用的方法上面添加装饰器
    @logger_handler
    def enter_username(self,username):
        pass

对于需要等待的元素的异常处理,也在通用方法中封装起来,这样在等待的时候直接调用就可以了,不用在定义的方法里在单独写异常处理了
        def wait_element_click(self,locator,timeout=20,poll=0.5,):
            '''等待某个元素可以被点击'''
            try:
                ele = WebDriverWait(self.driver, timeout=timeout, poll_frequency=poll).until(
                    expected_conditions.element_to_be_clickable(locator)
                )
                return ele
            except:
                HandlerAll.logger.error('元素找不到{}'.format(locator))

对于找不到元素进行截图
    对于截图路径的处理,可以在logs下建一个子文件夹img,通过时间戳去保存截图
        def screen_shot(self):
            '''截图'''
            path=config.IMG_PATH
            ts=datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
            filename=os.path.join(path,ts+'.png')
            self.driver.save_screenshot(filename)

    调用截图函数:
        def find_element(self,locator):
            '''查找元素'''
            try:
                el=self.driver.find_element(*locator)
                return el
            except:
                self.save_screenshot()
                HandlerAll.logger.error('元素找不到{}'.format(locator))

    截图装饰器
    def screenshot(f):
        def wrapper(*args,**kw):
            try:
                f(*args,**kw)
            except Exception as e:
                obj,*args=args
                if not hasattr(obj,'driver'):
                    raise e
                driver=getattr(obj,'driver')
                driver.save_screenshot('demo.png')
        return wrapper
    调用装饰器
        @screenshot
        def find_element(self,locator):
            pass
Jenkins集成的时候报错:找不到浏览器的路径:在 conftest 的 driver 函数中设置,不报这个错误不需要设置
from selenium.webdriver import ChromeOptions
如果执行Jenkins的错误是找不到Chrome,那么需要配置二进制路径和无头选项
# 导入浏览器的选项类
option=ChromeOptions()
# 设置浏览器的可执行文件的路径
option.binary_location=r'chrome.exe的路径'
driver = webdriver.Chrome(options=option)
allure
安装allure包:pip3 install allure-pytest

通过allure生成测试报告,生产的报告是json文件:
    pytest.main(["--alluredir=allureout".format(ts)])

将 allure 生成的json格式的测试报告文件转化,切换到对应项目下,通过命令行执行,执行完成后通过一个服务自动展示测试报告
    allure serve allureout

    待解决:
        遇到了一个问题,在对应项目下执行时,报错:bash: allure: command not found

Jenkins 设置allure
    -jenkins安装allure插件,【如果是想任何目录下都可以使用allure,那么需要将allure配置到环境变量当中】
        在'已安装'中要勾选这个插件,不然在'全局工具配置'中找不到这个选项
        在'全局工具配置'中,要添加本地allure的安装目录:比如:d:\program files/allure(不需要加\bin)
        进入python_web项目下,然后配置构建后操作:allure report
            配置中disabled不要勾选
            path填写的是测试报告的位置:allureout(从这个文件中获取测试报告的数据)
        然后点击保存即可,这样每次构建完成的时候,就会在构建的右侧显示allure图标,点击就可以进入allure测试报告页面
        注意:allure是不能发送邮件的,因为allure的数据是json格式的,可以通过点击图标查看

        在奴隶机上运行allure:
            进入节点,配置从节点,在工具位置下点击新增,
            然后选择allure,目录是allure本机的地址:d:\program files\allure
            然后保存,在节点中运行即可

        本地启动allure服务:allure serve 目录路径
        

    -全局工具配置中设置allure 命令行,在 Allure Commandline中设置

    -设置好了之后设置构建后操作,


web 自动化 Jenkins配置要使用分布式控制:
    系统管理-节点管理【manage nodes and clouds】-新建节点【配置好后】---
    在需要build的项目下配置:限制项目的运行节点【刚新建的节点】--
    然后构建就是这个节点也就是奴隶机在运行,服务器就需要自己去执行了,只管发送任务

接口不配奴隶,web 配奴隶
    因为web自动化特别费资源
web 自动化测试总结
xpath
    xpath的表达式的写法
        -// 相对路径
        -/ 绝对路径
        -and
        -索引从1开始,加括号
        -轴运算:找哥哥、姐姐、弟弟、妹妹
    xpath 和 css 的对比
        css更加的简洁,css不支持test文本,查找速度,查找效率更高
        xpath的功能更加的强大,支持text文本

selenium 运行机制,运行原理
    画的图:python[http]--->webdriver---->[js]---浏览器

    什么协议:HTTP

    为什么selenium 可以做到跨平台,跨语言?
        因为他是基于HTTP协议,实现webdriver的接口服务
        不管是什么语言,只要你能访问webdriver的接口服务,那么就能实现selenium的操作

    webdriver控制浏览器的时候,中间用的是JS【浏览器内置了JS的解释器】

鼠标操作
    ActionChains(driver).click(el).preform()
        -perform(),让动作生效
        -链条,因为 return self
            -应用到了web 自动化测试的框架中,PO模式使用这种链式调用
键盘操作
    类属性

select操作
    s=Select(el),s.select_by_visible_text

文件上传操作
    send_keys()
    系统交互,pywinauto,pyautogui

JS操作
    execute_script()
    arguments[0]

PO模式
    什么是PO模式
        是把页面封装成一个Python的对象,然后页面当中的属性和操作,封装成对象的属性和方法
    PO模式有什么作用
        可读性
        扩展性
        可维护性
        灵活性
        复用性
    PO模式方法的封装原则


web自动化测试的稳定性,如何提高稳定性?
    等待
        三大等待:隐式,显示,强制
    元素定位
        使用相对路径
        不轻易能改变的定位方式

    异常处理
        确定一个网页进入到了自己的页面
    重运行机制
        rerun
web 自动化测试项目
写那些用例,测试计划的时候需要考虑的
写框架的逻辑
什么时候介入自动化
    功能稳定的时候
写web 自动化用例的流程
    注释:测试步骤
    1、准备前置和后置
    2、手工测试流程(元素定位方式放在PO当中)
    3、需要封装哪些页面行为
    4、test_ 调用具体的页面行为
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值