一、什么样项目适合做web自动化

        1.软件需求不会频繁的变更。

        2.项目周期比较长。

        3.自动化的脚本能够重复利用。

介入点:第一个版本的核心功能确认以后,系统测试。

自动化的实施过程:

        1.可行性分析

        2.框架的选择(selenum,rf,....),框架的搭建。

        3.需求分析

        4.计划

        5.测试用例的设计(要么从功能测试抽取,要么重新写)

        6.编码的过程

        7.无人值守

        8.提交报告

        9.脚本维护

二、Python+Selenium环境搭建

        python+selenium自动化测试环境包括四个部分:python、selenium、chrome谷歌浏览器、chrome谷歌浏览器驱动。其中浏览器也可以是火狐,IE等。目前自动化的主流浏览器还是chrome谷歌浏览器

(1)python的安装

目前测试行业应用最广的编程语言当属Python为首。python现在主流是3.7的版本。安装很简单,在官网(官网地址:https://www.python.org)选择对应系统的版本直接下载,然后双击安装即可,安装路径可自定义,不是一定非要安装在C盘,但请尽可能避免中文路径。

python word自动化 python做web自动化_经验分享

 python安装包后,需要配置环境变量,其实在3.7的安装过程中,第一个界面有一个“add python to path”的选项可以勾选(大概是这个名字)。勾选之后会自动将python添加到系统环境变量Path中。当然你也可以选择手动添加,添加方法如下:

我的电脑右键选择属性–>高级系统设置–>环境变量–>环境变量–>系统变量:找到path变量并修改,在Path路径的最前面加入:C:\Python37;C:\Python37\Scripts; (如果你的python安装在其他路径请做相应的改动,笔者这里是默认路径)

特别要注意:很多新手会把Path中原来的内容删除掉,笔者提醒一下这个绝对不能这样做,慎重!慎重!慎重!

安装之后,运行CMD窗口,输入python指令,用于校验python是否安装成功。如下图表示成功!

python word自动化 python做web自动化_Python_02

另附上python开发工具PyCharm的官方下载地址:http://www.jetbrains.com/pycharm/download/

(2)selenium的安装

selenium可以通过pip命令进行安装,安装方法如下:

  1. 打开cmd窗口
  2. 输入:pip install selenium
  3. 等待cmd窗口提示successful,则selenium安装成功,如中途中断了继续输入pip install selenium重新安装,不影响!

(3)chrome浏览器

目前网上谷歌浏览器下载的坑太多了,很多网站做得跟官网太像了。一不小心就会入坑,这里笔者提供Chrome官网的下载地址:

Chrome官网:https://www.google.cn/chrome/

下载完成后双击会自动安装。等待安装完成即可。

(4)安装chrome浏览器驱动

当Selenium提出了WebDriver的概念之后,它提供了利用浏览器原生的接口,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件)。

由于使用的是浏览器原生的接口,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的geckoDriver驱动,Chrome就有专门的Chrome驱动等。

这里特别要注意:

chrome浏览器驱动必须和安装的chrome浏览器版本对应。那么如何保证对应呢?

先检查chrome浏览器的版本:点击chrome浏览器右上角的三个点–>帮助–>关于Google Chrome,如下图所示:

python word自动化 python做web自动化_Python_03

2.chrome浏览器驱动下载地址:

Chromedriver驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/

找到和上图chrome版本最接近的版本:上图为:78.0.3904.108,所以这里驱动选择:

python word自动化 python做web自动化_经验分享_04

 下载完成后:把chrome驱动包放入:C:\python37 目录下 (这个是必须的)

三、八大元素定位

面试题:如果元素定位不到,可能是什么原因?

        1.元素没有加载完成。

        2.元素在iframe或者frame框架里面。

        3.元素不可用(disabled),只读(readonly),不可见(hidden,

style="dispaly:none;")

        4.动态属性或者动态的DIV层。

id , name , link_text , partail_link_text,xpath,css, class_name,tag_name

#driver.find_element(By.ID,"kw").send_keys("码尚学院")

#driver.find_element(By.NAME,"wd").send_keys("码尚学院")

#driver.find_element(By.LINK_TEXT,"新闻").click()

driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()

前提:定位元素或者属性必须唯一。(调试:Ctrl+F)

xpath:

面试题:在xpath元素定位中/和//的区别是什么?

/:绝对路径:从html网页的第一个标签开始,然后慢慢的往下找,直到找到元素为止。

/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input 完全不用

//:相对路径:从html网页中的任意一个唯一的标签开始,直到找到元素为止。

//input

        相对路径://form/span/input

        相对路径+索引定位://form/span[1]/input

        相对路径+属性定位:

                //input[@autocomplete='off']         单一属性

                //input[@autocomplete='off' and @id='kw']         多个属性

相对路径+部分属性定位:

以什么开头://input[starts-with(@autocomplete,'of')]

以什么结尾://input[substring(@autocomplete,2)='ff'] 表示从第2个字符开始截取到最后

包括(最多)://input[contains(@autocomplete,'ff')]

相对路径+通配符:

        //*[@*="kw"]

        复制Xpath:我们从来不用。

                1.这种方式不一定准确。

                2.性能很低。

                     相对路径+文本定位:

                        //span[text()='按图片搜索']

css:

        相对路径,绝对路径,ID和Class,属性和属性组合定位,部分属性定位,子节点定位,

兄弟节点定位。

四、项目实战

unittest管理测试用例的规则:

        1.必须继承:unittest.TestCase

        2.导包:import unittest

        3.写一个以test_开头的测试用例。

为啥有没有main都没关系,都可以执行。原因是:unittest有两种运行方式,并且默认的还

是第一种运行方式: (巨坑)

1.命令行的运行方式(默认)

        python -m unittest 模块名.py

        python -m unittest 模块名.类名.方法名

2.main主函数运行方式(非默认)

main方式。

frameset(框架集,直接忽略)

frame(框架)/iframe(子框架)

导包的快捷键:Alt+Enter

定位一组元素:

windows自带的弹窗:         alert 只有一个确定按钮         confirm 有一个确定和一个取消按钮

        prompt 除了确定和取消按钮外还有一个输入框。

        都是:driver.switch_to.alert

五、设计模式(封装)

PO模式+关键字驱动模式

PO模式:page object model 页面对象模型。把项目中的页面封装成一个一个的类,一个

页面对应一个类。那么通过实例化这个类的对象,去调用这个类里面的属性和方法。它是通

过页面来分类。

好处:

1.线性脚本的问题。

2.代码不能重复利用的问题。

3.后期的的代码维护问题

简历的栗子:

京东:仓库(日用品,文具,电器,分类保存。),

PO分三层:

1.基础层:主要放封装的selenium原生的基础方法。

2.页面对象层:pageobject,主要存放页面的元素定位信息和元素的动作。

3.测试用例层:存放测试用例以及测试数据。

关系:2.页面对象层继承1.基础层,3.测试用例层调用页面对象的方法。

六、引入Pytest(解耦合)

默认的测试用例的运行规则:

1.测试模块必须以test_开头或者_test结尾。

2.测试类必须以Test

3.测试用例必须以test_开头

pytest的运行的方式有三种

1.命令行

2.main方法

3.通过pytest.ini文件来运行。

随意的切换。unitest/pytest都必须要灵活的掌握并且灵活的应用。

七、pytest结合allure-pytest插件生成漂亮的测试报告

1.下载allure并且解压,解压后还需要设置环境变量。

官网下载地址:https://github.com/allure-framework/allure2/releases

解压到任意盘

配置环境变量:把E:\allure-2.13.7\bin配置到path路径。

2.查找allure-pytest插件

直接在pycharm里面安装。

pip install allure-pytest

验证:allure --version

3.生成json格式的临时报告文件。

在pytest.ini里面的addopts加入--alluredir ./temp

4.生成allure级别的HTML格式的报告

os.system('allure generate ./temp -o ./reports --clean')

八、实现企业级的能够落地实施的web自动化框架以及实现报告的定制

报告的定制:logo的定制,模块的定制,用例的定制,严重程度,错误截图,用例描述, 参数化。日志监控。

编程语言:python,java

设计模块:PO,关键字驱动

用例管理:精通unitetst,pytest

数据驱动:ddt,pytest.mark。parametrize

二次封装:excel,yaml,ini,数据库封装

日志监控:logging

异常处理:try/except

jenkins:持续集成和无人值守

分布式运行:Grid

前端:html和js

九、Pytest的数据驱动@pytest.mark.parametrize()+Excel实现数据 驱动

方法详情:

@pytest.mark.parametrize(args_name,args_value)

args_name:参数名

args_value:参数值(list列表,tuple元祖,字典列表,字典元祖)

举例:

@pytest.mark.parametrize("caseinto",["百里","依然","星瑶"])
def test_01(self,caseinto):
print(caseinto)

举例:

@pytest.mark.parametrize("name,age",[["百里","12"],["依然","14"]])
def test_01(self,name,age):
print(name,age)