遠程修改OpenWRT開發板中的文件

這兩天收到一個任務,某接口測試的測試用例需要更新,需要在測試中修改開發板中的文件。

先白話下上層的一些東西,包括這套接口測試在內,可見的全部測試都掛在Jenkins上,測試對象是某刷了OpenWRT修改版的智能設備,Jenkins上游自然是自動編譯生成build文件的各種job(有主線和針對不同需求的分支),一旦成功生成新的build文件,就會觸發下游各種各樣的測試,其中包括接口測試。

掛在Jenkins上的所有測試大都基於一個公司內部用shell實現的基礎測試框架,包含了很多基本函數,像刷build,ssh連接執行命令,試探主機是否在線,獲取主機版本號等等,然後到了具體測試的實現的時候,就各顯神通了,大部分測試都由shell實現,web頁面測試的有Selenium Webdriver和Casperjs。

廢話完了說重點,要解決的問題就是要遠程登錄到OpenWRT開發板(智能硬件)上修改某文件( /etc/config/fw ),要找到該文件後在文件中某行下添加一行語句,比如找到 /etc/config/fw 文件,在文件找到 config firewall 這一行,再在這一行下插入一條 option blacklist ‘1’。

測試中是在基礎測試框架中的 control.sh 裏執行 python3 -m py.test –junitxml=./result/results.xml 來把測試拉起來,於是就查找python裏做遠程ssh登錄執行Linux的方法,找到paramiko模塊,最後實現代碼大致以下,sed那一段挺麻煩,不過總算是找到解決方法了。

def sshclient_execmd(cmd):
  try:
    s = paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(hostname=list.host_ip, port=22, username=list.username, password=list.password,timeout=5)
    stdin, stdout, stderr = s.exec_command(command=cmd,timeout=30)
    return s,stdout
  except Exception as e:
    print(e)
    s.close()
  return s, None

sshclient_execmd('''sed -i '/^config.*firewall/a\        option blacklist '"'1'"'' /etc/config/fw''')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章