UI自动化:如何提高自动化框架的可移植性(取消绝对路径)

18 篇文章 0 订阅
17 篇文章 0 订阅

背景:
博主刚入UI自动化测试2个月左右,通过自学搭建了第一个自动化的测试框架,随着学习的深入,发现了一期框架很多的优化点,正好趁着自己要测试的项目网站重构,自己也对自己的测试框架进行二期重构,重构的一个重点就是如何取消源代码中使用或配置的绝对路径,提高框架的可移植性,保证其他的同学拿到自己的框架不需要修改配置文件或代码中的绝对路径,即可使用。
在重构的过程中,遇到了一些问题,也拿出来跟大家一起分享。

初始方案:设置一个py文件读取根目录(失败)

刚开始博主设置了一个python文件专门用于读取项目的根目录,然后运行发现获取的路径没有问题,心里美滋滋,然后就出问题了,当其他的类调用这个文件中的类获取根目录的时候,发现获取的并不是根目录。举个例子:

autoTest/getRootPath.py
autoTest/config/chromedriver.exe
autoTest/testCase/test_login.py
autoTest/run_all.py
说明:BasePage类我定义了chromedriver的路径(在工程的config下)

以上是一个简单的项目结构,项目名称为autoTest,getRootPath.py中定义了一个类和一个方法,使用个核心方法就是os模块中的os.getcwd(),这个方法可以获取当前文件所在的文件夹路径,包括系统的什么C盘D盘之类。
然后在run_all.py中我测试一下刚刚封装的login方法,发现运行起来没有问题,然后我就高兴的去testCase下面写一个test_login的测试用例,结果报错如下:

Error message: “'chromedriver' executable needs to be available in the path”

相信大家对这句话应该不陌生,为什么同样的代码会报错呢,年轻的自己一脸懵逼,然后也百度方法,使用什么os.environ()把chromedriver添加到环境变量中。然后还是gg,只能定位原因,通过打印chromedriver的获取路径,发现了问题。
C:\Users\PycharmProjects\webDriveAutoTest-V2**testCase**\config\chromedriver.exe
C:\Users\PycharmProjects\webDriveAutoTest-V2\config\chromedriver.exe
说明:通过拼接根目录和指定的文件路径,源代码如下

chrome_driver_path = rootpath +r'\config\chromedriver.exe'

导致这个问题的原因相信大家已经明白了,因为运行在testCase目录下的脚本文件,是以当前的目录为核心,当调用basePage的时候获取的根目录路径就加上testCase,同样在工程下面的run_all.py获取的是真是的根目录所以他的运行是OK的。

该失败方案解决方法见博主下一篇博文。

笨办法:字符串分片+拼接(成功)

    def getRootPath(self):
        #获取当前脚本路径
        initpath = os.getcwd()
        #print(initpath)
        #查找初始路径中特定尾部子串的位置
        index = initpath.find('V2')
        #分片,获取根目录
        rootpath = initpath[:index+2]
        #返回
        return rootpath

就这么一个小小的方法也是把博主这一根死脑筋拉了回来,思路比较简单,管他什么路径,先获取当前的路径再说,反正项目名称是固定的,那么就找个项目路径的尾部字符串定位一下,比如项目名称“autoTest-V2”,那么我从获取的初始路径中查找这个V2的位置,把V2前面的路径拿到即可。
这样的话在其他的文件中使用项目下某个文件的时候,就可以避开什么C盘D盘。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值