文章目录
前言
记录一下,最近弄配置表的自动化测试,思路是想着结合Jenkins和本地SVN,定时去看看哪些配置文件有更新,然后根据文件名来执行对应的测试用例,这篇主要是记录下SVN的操作,前面也写过一篇Python操作SVN的,这篇是用命令行的方式运行。
提示:以下是本篇文章正文内容,下面案例可供参考
环境
Win10+Python3.6
安装
需要先下载命令行工具
点击这里下载,也可以去它的主页下载
下载好解压之后可以需要配置下变量环境
在命令行下输入:
set SVN_CMD_HOME=解压路径\Apache-Subversion-1.14.0\bin
set path=%path%;%SVN_CMD_HOME%
svn help
执行 SVN help 命令能输出帮助信息就配置好了
正文
一、常用的SVN命令
检出
svn checkout [-depth ARG] [--ignore-externals] [-r rev] URL PATH
深度选项框跟-depth参数相关
如果希望忽略外部被选中,使用–ignore-externals选型。
如果你正在检出特定的修订版本,在URL后使用-r指定。
更新
svn info URL_of_WC
svn update [-r rev] PATH
更新多个项目在Subversion还不是原子操作,所以TortoiseSVN会首先找到版本库的HEAD修订版本,然后将所有项目更新到特定修订版本,防止出现混合修订版本的工作副本。
如果只有一个项目被选中更新,或选中的项目来自不同的版本库,TortoiseSVN只会更新到HEAD。
没有使用命令行选项,更新到修订版本也实现了更新命令,但提供了更多的选项。
更新到版本
svn info URL_of_WC
svn update [-r rev] [-depth ARG] [--ignore-externals] PATH
深度选项框跟-depth参数相关
如果希望忽略外部被选中,使用–ignore-externals选型。
提交
在TortoiseSVN,提交对话框使用Subversion命令,第一部分是检查工作副本哪些文件可能被提交,然后你可以检查列表,比较与BASE的区别,选择你希望提交包含的项目。
svn status -v PATH
如果选择了显示未版本控制的文件,TortoiseSVN会遵循忽略规则显示工作目录中所有未版本控制的文件和文件夹。这个特性在Subversion中没有等价操作,因为svn status 命令不扫描未版本控制的文件夹。
如果你选择了未版本控制的文件和文件夹,这些项目都会先增加到你的工作副本。
svn add PATH...
当你点击确认,开始执行Subversion提交。如果你不修改所有的文件检查框,TortoiseSVN 会递归提交工作副本。如果你取消选择一些文件,那么就必须使用非递归提交 (-N) ,每个路径都必须在命令行上单独指定。
svn commit -m "LogMessage" [-depth ARG] [--no-unlock] PATH...
日志消息是日志编辑框的内容。它可以为空。
如果选择了保持锁,就使用–no-unlock开关。
差异
svn diff PATH
如果你在右键菜单使用差异,就会将修改的文件与基础版本比较。控制台的命令输出也是执行这个操作,输出统一差异格式。然而,TortoiseSVN并不采用这种方式。TortoiseSVN 使用TortoiseMerge (或者你选择的比较差异程序)可视化的全文显示差异,所以它没有相同的控制台操作。
你可以使用TortoiseSVN,比较任意两个文件的差异,不管他们是否受版本控制。TortoiseSVN只是把这两个文件传递给已经选择的比较差异程序,让它比较差异。
显示日志
svn log -v -r 0:N --limit 100 [--stop-on-copy] PATH
或
svn log -v -r M:N [--stop-on-copy] PATH
默认情况下,TortoiseSVN尝试用–limit方法取得100个日志消息。如果设置了让它使用旧借口,那么就使用第二种是获得100个日志消息。
如果选择了停止于复制/改名,就使用–stop-on-copy开关。
检查修改
svn status -v PATH
或
svn status -u -v PATH
只在你的工作副本执行初始的状态检查。如果你点击检查版本库,那么也检查版本库,查看哪些文件会被更新操作修改,它需要-u开关。
如果选择了显示未版本控制的文件,TortoiseSVN会遵循忽略规则显示工作目录中所有未版本控制的文件和文件夹。这个特性在Subversion中没有等价操作,因为svn status 命令不扫描未版本控制的文件夹。
已解决
svn resolved PATH
改名
svn rename CURR_PATH NEW_PATH
删除
svn delete PATH
恢复
svn status -v PATH
首先开始状态检查,查看你的工作副本有哪些项目可以被撤销。你可以复审文件列表,检查这些文件的修改,然后选择你要撤销的项目。
当你点击确认时,开始Subversion撤销操作。如果你不修改所有的文件检查框,TortoiseSVN 会递归撤销 (-R)工作副本的修改。如果你取消选择一些文件,那么就必须使用非递归撤销 ,每个路径都必须在命令行上单独指定。"
svn revert [-R] PATH...
清理
svn cleanup PATH
获得锁
svn status -v PATH
首先开始状态检查,查看你的工作副本有哪些项目可以被加锁。你可以选择想加锁的项目。
svn lock -m "LockMessage" [--force] PATH...
加锁信息是加锁编辑框的内容。它可以为空。"
如果选择了强制锁定 ,就使用–force开关。
释放锁
svn unlock PATH
添加
svn add PATH...
如果选择了一个文件夹,TortoiseSVN会首先会递归的访问可以添加的条目。
二、使用Python的OS模块执行
如果不需要返回数据则可以OS模块
import os
os.system('svn update path')
三、使用Python的subprocess模块执行
主要是收集命令的执行结果,根据结果来提取想要的信息
import subprocess
log = subprocess.Popen('svn updata path',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).stdout.readlines()
log[0].decode('gb2312')
返回的是一个列表,如果返回的中文出现乱码,参考下面的方法
四、处理中文乱码
gb2312类型
# sample
>>> name = '游戏测试'
>>> encode_name = name.encode('gb2312')
>>> encode_name
b'\xd3\xce\xcf\xb7\xb2\xe2\xca\xd4'
>>> encode_name.decode('gb2312')
'游戏测试'
utf-8类型
# sample
>>> name = '游戏测试'
>>> encode_name = name.encode('utf-8')
>>> encode_name
b'\xe6\xb8\xb8\xe6\x88\x8f\xe6\xb5\x8b\xe8\xaf\x95'
>>> encode_name.decode('utf-8')
'游戏测试'
还有这样的utf-8:%E6%B8%B8%E6%88%8F%E6%B5%8B%E8%AF%95
上面无法转换,需要用到 urllib.parse库
五、提取命令行数据
提取更新文件的完整路径
import re
import subprocess
def get_table_path():
tables = []
svn_log = subprocess.Popen('svn updata path',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).stdout.readlines()
for f in svn_log:
file_path = re.search("Restord '(.*).xlsx'\r\n",f)
if file_path:
tables.append(file_path.group(1))
return tables
结语
获取到更新的文件,第一步工作完成,后续执行只需要测那些有更新的文件即可
欢迎小伙伴关注微信公众号ID:gameTesterGz
或关注我的优快云:https://blog.youkuaiyun.com/qq_32557025
谢谢各位的关注、点赞!