@[T## #python+appium+pytest自动化测试详解

pytest pom封装登录 python+appium+pytest_pytest pom封装登录


这是搭建好的自动化测试的目录。Common(基类层)

pytest pom封装登录 python+appium+pytest_封装_02


1.base_page

pytest pom封装登录 python+appium+pytest_封装_03

最基础类,供其他文件调用,封装浏览器方法,以方便后面代码的调用。

可以二次封装自带的方法,方便调用,例如:手机上的滑动操作,然后通过元素定位获取到元素的属性值等。
其他地方调用基础类的方法。如果需要修改调用地方的方法,只需要修改基础类里面的方法,提高代码的复用性,可维护性。

2.excel_util

pytest pom封装登录 python+appium+pytest_封装_04


excel_util是封装了读取excel文件的方法,当测试用例需要编写正向流程,异常流程时,可以把流程需要输入的字段编写到excel文件中,然后循环读取,通过pytest.mark下的方法通过装饰器加载到对应测试case上,实现用例通过不同的输入多次重复执行。3.read_config

pytest pom封装登录 python+appium+pytest_封装_05


read_config文件是读取配置文件,配置文件如:测试系统,测试机版本,测试app包名等配置信息。

配置信息单独放在一个文件夹下,方便之后切换测试机或者修改配置。Config(数据层)

pytest pom封装登录 python+appium+pytest_python_06


这个文件夹放系统配置文件,系统配置文件包含如上参数,不同的测试机和不同被测软件,只要统一在这里修改就可。data(文件层)

pytest pom封装登录 python+appium+pytest_pytest_07


文件层是放置测试文件的目录,相当与测试用例的输入值,以及预期结果的值。

pytest pom封装登录 python+appium+pytest_pytest_08


类似于这种格式的文件,然后通过装饰器@在用例上调用,输入参数,然后比对实际结果与预期结果。一行就是一条测试case。Page_view(页面层)

pytest pom封装登录 python+appium+pytest_python_09


页面层selenium与appuim一致。

这个文件夹存放的是自动化测试用到的页面,测试页面。一个页面一个py文件,页面文件中存储的是页面中的静态元素定位和动态页面方法。

静态元素定位,是定位好需要用到的元素,测试中未用到的元素不需要定位,用到什么元素就定位什么元素。把需要用到的元素一个个封装定位好,方便写页面方法的时候调用。

动态页面方法,是指该页面下的操作,比如:登陆页面,输入用户名。密码,点击登陆按钮。这些操作都是在这个页面内完成的,属于该页面独有的页面动作,就是动态页面方法。跟静态元素定位一样的是,测试中需要用到的动作才进行封装编写。测试中不需要用到的动作流程,不需要封装到这个页面文件中。

动态页面方法,是页面下一个个方法,一个动作封装为一个方法,再利用页面中定位好的静态元素,以及继承自base基类中的方法,编写好每一个动态页面方法的流程,方便调用。runner(执行入口+报告生成)

pytest pom封装登录 python+appium+pytest_封装_10


run.py为用例执行的入口,在这里同意执行测试用例,以及生成allure报告。

‘–clean–alluredir’为清除之前的allure报告,因为会占用,所以每次跑脚本生成报告的时候加上这个,就会自动把之前的allure报告给清理掉。

‘-s’,’-v’为pytest执行的指令,-v表示打印详细的信息 -s表示输出print打印信息。还有别的执行命令,如:静默执行 -q等。

‘–alluredir’, ‘./result’ 为生成新的result结果集以及生成allure报告。Testcase(测试用例层)

pytest pom封装登录 python+appium+pytest_封装_11

存放测试用例,测试用例层调用页面包中对应页面下的动作方法,完成测试步骤,以及不同的测试用例,编写不同的断言,判断该条测试用例是否正确通过。

代码解述

基础框架层每层用法编写完,接下来就可以分每个模块,文件的功能进行分析。

先从run.py执行文件开始。

pytest pom封装登录 python+appium+pytest_appium_12

执行文件,顾名思义,这个文件相当于自动化测试脚本的开关按钮。编写好脚本,配置好测试地址,配置好测试数据,所有准备工作做完之后,就在这个文件下执行。

If__name__=’main’:

这个是python内的的main方法,意思在这个main方法下的代码,只能在此文件执行时运行。就像base文件下封装的内置方法,可以在别的地方调用使用和运行。

但是加了这个main方法后,文件只能在当前py文件下被执行,别的文件不能调用。这个方法的意义,意思就是相当于这个开关只能在这个文件执行,要是别的文件都可以调用,都可以执行和运行代码,这个文件就没意义。而且这个文件调用一次,那个文件调用一次,非常不利于管理,所以每一个脚本都会有一个执行文件。就可以单步执行。run.py这个文件相当于一个总开关,执行后会自动去对应目录遍历Test的文件以及test命名的用例。

pytest pom封装登录 python+appium+pytest_pytest_13


run.py文件启动方法:

整个文件夹执行参数:‘…/test_case’

单个文件执行,或多个文件执行:‘…/test_case/test_my.py’,‘…/test_case/test_xx.py’

同时也可以在终端下执行用例,终端找到对应的目录。然后执行python run.py就可以启动脚本,用例跑完之后,可以直接执行allure open report 就可以直接打开生成的测试报告。

接下来讲解框架模型,框架是采用POM模型(page object model)

方法层,页面层,用例层

pytest pom封装登录 python+appium+pytest_appium_14

方法层

新建一个base的包,这个包中新建一个base_page的文件。

定义一个类,二次封装selenium中的方法,让所有页面都继承自这个类,方便调用。不需要全部封装,当需要用到什么方法,就手动在这个类中添加什么方法。

对方法的归类整理。好处是,二次封装的话,可以自定义拼接改造原生方法,更方便自己在自己的框架中使用。而且不同文件调用封装好的方法,如果要一起改掉,直接改源头的方法就可以了,代码的可维护性增强了。

pytest pom封装登录 python+appium+pytest_appium_15

页面层
新建一个pageobject的包,存放所有的页面文件。
页面层主要是基于自动化测试会用到的界面。一个页面新建一个py文件,一个页面中封装一个页面,这个页面类继承base基类。方便页面类中调用selenium的原生方法。
页面中主要分为两个块:静态元素定位,动态页面方法。
静态元素定位:自动化测试脚本需要用到的元素,封装成一个个对象,方便写方法的时候调用,页面中只要定义需要用到的元素,页面中不需要用到的元素不需要定义写在类中。
动态元素方法:自动化测试脚本中封装好的页面方法,一个动作编写一个方法,利用页面中封装好的元素定位,完成页面动作,跟静态元素定位一样,只需要封装用到的动作,不需要的动作不需要封装方法。编写封装好页面动作,方便之后测试用例层调用。

pytest pom封装登录 python+appium+pytest_封装_16

用例层
新建一个tasecase的包,存放所有编写的测试用例文件。
用例层是直接调用页面层定义好的方法,运行用例。用例层一般添加测试数据,实现断言。
能在用例层直接点击单条用例的执行按钮,可以调试单条执行用例,也可以直接点击类左边的执行按钮,执行类下的测试用例,用作调试。

编写自动化测试用例
1.先写页面层,把需要测试的页面定位,元素都写完。写的时候调用方法调用基类的方法,如果方法来定义,就去基类二次封装方法。调用。
2.写好页面层之后,就可以开始写用例层了,每一条用例一个方法,都需要test开头,用例里面直接调用页面方法,然后写setup_method,夹具层,把启动app,每条用例都需要用到的代码剥离出来。