程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> Python獲取遠程文件內容

Python獲取遠程文件內容

編輯:Python

最近需要實現一個功能,使用Jmeter自動生成測試報告。Jmeter腳本存放在Git倉庫,現在需要實現在腳本發生更新時才自動生成測試報告。

我的思路是這樣的:在拉取Git項目之前通過git rev-list --count HEAD命令記錄一個版本號,然後在拉取項目完成生成之後生成測試報告之前再通過此命令獲取另一個版本號。比較這兩個版本號,如果相同,則不自動生成測試報告,如果不同,則自動生成測試報告。

在本地測試如下:

首先寫一個腳本,獲取Git項目的版本號。

#!/usr/bin/env python
# Author: Robin Wen
# Date: 18:15:25 2014-12-24
# Desc: Get repo version.
# FileName: get_git_version.py

import subprocess, os

os.chdir('YOUR_PATH')
lcmd='git rev-list --count HEAD'
res=subprocess.call(lcmd, shell=True)

然後寫一個測試腳本,內容如下:

#!/usr/bin/env python
# Author: Robin Wen
# Date: 18:16:54 2014-12-24
# Desc: Test get repo version.
# FileName: test_result.py

import os

# 僅做測試,這個腳本的執行結果當然是equal。
os.system("python /Users/robin/get_git_version.py > old.log")
os.system("python /Users/robin/get_git_version.py > new.log")

file = open('old.log', 'r')
old=file.read()
file.close()

file = open('new.log', 'r')
new=file.read()
file.close()

print old
print new

if old == new:
    print "equal"
else:
    print "not"

腳本使用方法:首先在拉取之前獲得一次版本號,然後在拉取之後再獲得一次版本號,就可以判斷出項目是否發生更新了。

但問題來了,我是想實現遠程自動化生成測試報告。現在就輪到Fabric上場了。

Fabric是一個Python的遠程執行和部署工具,使用相當簡潔。

GitHub地址:
官網:Fabric

其中,遠程調用使用Fabric提供的run方法,此方法和Ruby中的run有異曲同工之妙。

下面,談到本文的核心了。使用Fabric讀取遠程文件需要使用StringIO模塊和get()方法,通過StringIO模塊的getvalue()方法獲取文件內容。

下面是腳本的核心代碼:

#!/usr/bin/env python
#encoding:utf-8
# Author: Robin Wen
# Date: 22/22/2014 15:02:20
# Desc: Auto generate testing reports.

# Import necessary packages.
import os
from StringIO import StringIO

from fabric.api import env, cd, prefix, sudo, run, hide, local, put, get, settings
from fabric.contrib.files import exists, upload_template
from fabric.colors import yellow, green, blue, red

# Update the repo via git.
def git_pull():

    print green('Update the repo via git.')

    # Get current git version.
    run('python '+script_dir+'/get_git_version.py > '+script_dir+'/old.log')

    # Git Pull.
    with cd(git_repo):
         run('git pull')

    print green('Update the repo via git.')

# Auto generate testing reports.
def auto_gen():

    print green('Auto generate testing reports.')
    
    run('python '+script_dir+'/get_git_version.py > '+script_dir+'/new.log')

    fd = StringIO()
    get(script_dir+'/old.log', fd)
    old=fd.getvalue()

    fd = StringIO()
    get(script_dir+'/new.log', fd)
    new=fd.getvalue()

    if old == new:
        print red('Nothing changed, it won\'t generate testing reports.')
    else:
        run('ant -buildfile '+script_dir+'/build.xml gen-testing-report')
        print green('Auto generate testing reports finished!')

在遠程服務器調用該腳本即可,具體使用方法可以參考此處,該項目已經托管在GitHub上。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved