整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          自動(dòng)化測(cè)試之HTML測(cè)試報(bào)告

          載地址HTMLTestRunner.py文件:

          http://tungwaiyip.info/software/HTMLTestRunner.html

          下載的適合python2,如果python3要修改一些內(nèi)容

          首先吧HTMLTestRunner文件添加到環(huán)境變量里,可以直接放到python的Lib目錄下

          HTMLTestRunner是python標(biāo)準(zhǔn)庫(kù)unittest單元測(cè)試框架的一個(gè)擴(kuò)展,用于生成HTML測(cè)試報(bào)告


          生成HTML測(cè)試報(bào)告

          #coding:utf-8
          import unittest, HTMLTestRunner

          class Testcase(unittest.TestCase): # 測(cè)試用例類
          # 具體的測(cè)試用例,一定要以test開頭
          def test1(self):
          self.assertEqual(1, 1)

          def test2(self):
          self.assertEqual(2, 2)

          if __name__ == "__main__":
          # 構(gòu)造測(cè)試集
          suite = unittest.TestSuite()
          suite.addTest(unittest.makeSuite(Testcase)) # 執(zhí)行該測(cè)試類所有用例

          # 定義報(bào)告的存放路徑,以二進(jìn)制寫的形式打開文件
          f = open('test.html', 'wb')

          # 定義測(cè)試報(bào)告,stream:報(bào)告存放路徑,title:報(bào)告標(biāo)題,description:描述
          runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=
          u'測(cè)試用例標(biāo)題', description=u'描述')
          runner.run(suite) # 運(yùn)行測(cè)試用例
          f.close() # 關(guān)閉文件


          返回結(jié)果(測(cè)試報(bào)告詳情):

          --stream :存放報(bào)告寫入文件的存入?yún)^(qū)域

          --title :測(cè)試報(bào)告的主題

          --description :測(cè)試報(bào)告的描述


          報(bào)告用例類和用例方法加備注

          為了生成帶有中文描述的測(cè)試用例類和測(cè)試用例

          在用例類和用例方法下,通過’’’ ‘’’或””” “””來添加備注

          #coding:utf-8
          import unittest, HTMLTestRunner

          class Testcase(unittest.TestCase): # 測(cè)試用例類
          u'''類名后加備注'''

          def test1(self):
          u'''用例后面加備注1'''
          self.assertEqual(1, 1)

          def test2(self):
          u'''用例后面加備注2'''
          self.assertEqual(2, 2)

          if __name__ == "__main__":
          # 構(gòu)造測(cè)試集
          suite = unittest.TestSuite()
          suite.addTest(unittest.makeSuite(Testcase))

          # 定義報(bào)告的存放路徑,以二進(jìn)制寫的形式打開文件
          f = open('test.html', 'wb')

          # 定義測(cè)試報(bào)告,stream:報(bào)告存放路徑,title:報(bào)告標(biāo)題,description:描述
          runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=
          u'測(cè)試用例標(biāo)題', description=u'描述')
          runner.run(suite) # 運(yùn)行測(cè)試用例
          f.close() # 關(guān)閉文件


          返回結(jié)果:

          測(cè)試報(bào)告文件名

          #coding:utf-8
          import unittest, HTMLTestRunner, time
          from unittest.loader import makeSuite

          class Testcase(unittest.TestCase): # 測(cè)試用例類
          # 具體的測(cè)試用例,一定要以test開頭
          def test1(self):
          self.assertEqual(1, 1)

          def test2(self):
          self.assertEqual(2, 2)

          if __name__ == "__main__":
          # 構(gòu)造測(cè)試集
          suite = unittest.TestSuite()
          suite.addTest(makeSuite(Testcase)) # 執(zhí)行該測(cè)試類所有用例

          # 定義報(bào)告的存放路徑,以二進(jìn)制寫的形式打開文件
          now = time.strftime("%y-%m-%d %H_%M_%S")
          f = open('./' + now + 'test.html', 'wb')

          # 定義測(cè)試報(bào)告,stream:報(bào)告存放路徑,title:報(bào)告標(biāo)題,description:描述
          runner = HTMLTestRunner.HTMLTestRunner(stream=f, title=
          u'測(cè)試用例標(biāo)題', description=u'描述')
          runner.run(suite) # 運(yùn)行測(cè)試用例
          f.close() # 關(guān)閉文件


          返回結(jié)果:


          測(cè)試報(bào)告亂碼問題


          將紅框里的內(nèi)容注釋掉改成uo = o.decode('utf-8')

          DF文檔的打印在很多應(yīng)用場(chǎng)景中都會(huì)被使用到,最為常見的就是實(shí)驗(yàn)室信息管理的應(yīng)用場(chǎng)景,期間涉及到大量的報(bào)告呈現(xiàn)及打印的需求。

          LIMS背景介紹

          實(shí)驗(yàn)室信息管理系統(tǒng)(Laboratory Information Management System 英文縮寫LIMS)是將以數(shù)據(jù)庫(kù)為核心的信息化技術(shù)與實(shí)驗(yàn)室管理需求相結(jié)合的信息化管理工具。以ISO/IEC17025:2017 CNAS-CL01《檢測(cè)和校準(zhǔn)實(shí)驗(yàn)室能力的通用要求》(國(guó)標(biāo)為GB/T 27025:2008)規(guī)范為基礎(chǔ),結(jié)合網(wǎng)絡(luò)化技術(shù),將實(shí)驗(yàn)室的業(yè)務(wù)流程和一切資源以及行政管理等以合理方式進(jìn)行管理。

          通過LIMS系統(tǒng),配合分析數(shù)據(jù)的自動(dòng)采集和分析,大大提高了實(shí)驗(yàn)室的檢測(cè)效率;降低了實(shí)驗(yàn)室運(yùn)行成本并且體現(xiàn)了快速溯源和痕跡,使傳統(tǒng)實(shí)驗(yàn)室手工作業(yè)中存在的各種弊端得以順利解決。目前實(shí)驗(yàn)室信息管理系統(tǒng)在西方發(fā)達(dá)國(guó)家的應(yīng)用相對(duì)比較成熟,我們國(guó)家經(jīng)過多年發(fā)展,很多實(shí)驗(yàn)室也開始逐漸認(rèn)識(shí)到信息化在管理中的作用,紛紛開始引入LIMS。

          LIMS系統(tǒng)需求及解決思路

          在LIMS系統(tǒng)構(gòu)建的過程中,實(shí)驗(yàn)?zāi)0逶O(shè)計(jì)、實(shí)驗(yàn)數(shù)據(jù)填報(bào)、導(dǎo)出完整的PDF實(shí)驗(yàn)報(bào)告并且實(shí)現(xiàn)檢測(cè)過程無(wú)紙化、系統(tǒng)化,檢測(cè)報(bào)告電子化是LIMS系統(tǒng)的主要需求。那么如何快速又高質(zhì)量的輸出PDF實(shí)驗(yàn)報(bào)告呢?

          借助SpreadJS表格技術(shù)及GcExcel僅僅需要三步就可以完成整個(gè)功能的開發(fā):

          1. 將SpreadJS集成到系統(tǒng)中,快速實(shí)現(xiàn)數(shù)據(jù)的在線錄入
          2. 在系統(tǒng)中配置導(dǎo)出PDF文檔所需要的參數(shù)
          3. 通過GcExcel將實(shí)驗(yàn)報(bào)告導(dǎo)出為PDF文件

          具體的操作步驟

          用SpreadJS完成實(shí)現(xiàn)模板設(shè)計(jì)和實(shí)驗(yàn)數(shù)據(jù)填報(bào)

          利用SpreadJS的在線表格編輯器,實(shí)驗(yàn)人員就可以通過類Excel的操作完成實(shí)驗(yàn)報(bào)告的設(shè)計(jì)。

          通過以下代碼就可以將SpreadJS快速集成到現(xiàn)有的系統(tǒng)中:

          創(chuàng)建一個(gè)JavaScript應(yīng)用程序:

          注意 SpreadJS是無(wú)依賴的,僅僅需要以下文件: gc.spread.sheets.xx.x.x.css, gc.spread.sheets.all.xx.x.x.min.js即可.

          <!DOCTYPE html><html lang="zh"><head>
          <meta charset="utf-8" />
          <script src="gc.spread.sheets.all.xx.x.x.min.js"><link rel="stylesheet" href="gc.spread.sheets.xx.x.x.css"type="text/css"/></head>
          <body></body></html>

          添加SpreadJS容器元素 - 在頁(yè)面的body元素中添加一個(gè)DOM元素作為它的容器。

          <div id="ss"></div>

          初始化SpreadJS JavaScript控件。 - SpreadJS控件通過使用new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 })來進(jìn)行初始化。

          window.onload = function () {// Initialize a workbookvar workbook = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 1 });// get workbook object// var workbook = GC.Spread.Sheets.findControl(document.getElementById('ss'));
          };

          在完成嵌入之后,通過SpreadJS的數(shù)據(jù)綁定的功能,某些默認(rèn)數(shù)據(jù)可以從數(shù)據(jù)庫(kù)加載,顯示到實(shí)驗(yàn)?zāi)0逯校瑢?shí)驗(yàn)人員填報(bào)的實(shí)驗(yàn)數(shù)據(jù)也可以通過數(shù)據(jù)綁定輕松獲取到

          用SpreadJS完成導(dǎo)出PDF(打印)的配置

          使用SpreadJS的在線表格編輯器可以完成導(dǎo)出PDF的配置,可配置導(dǎo)出區(qū)域,重復(fù)區(qū)域,頁(yè)眉,頁(yè)腳,水印等,對(duì)導(dǎo)出PDF報(bào)告進(jìn)行自定義。

          用GCExcel將實(shí)驗(yàn)報(bào)告導(dǎo)出

          在SpreadJS中完成模板設(shè)計(jì),實(shí)驗(yàn)數(shù)據(jù)填報(bào),以及各種打印配置后,可以將整個(gè)實(shí)驗(yàn)?zāi)0逦募?dǎo)出為一個(gè)json,發(fā)給后端,后端就可以用GCExcel加載,GCExcel可以完美兼容SpreadJS的特性,在SpreadJS中對(duì)模板的配置,以及對(duì)導(dǎo)出的PDF的配置,在GCExcel中都完美兼容,當(dāng)然也可以在GCExcel完成對(duì)模板的配置以及PDF導(dǎo)出的配置。

          Java
          Workbook workbook = new Workbook();
          //打開SpreadJS導(dǎo)出的模板
          workbook.open("template.ssjson");
          // 導(dǎo)出PDF配置
          PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
          // 配置支持換行縮小
          pdfSaveOptions.getShrinkToFitSettings().setCanShrinkToFitWrappedText(true);
          // 導(dǎo)出PDF
          workbook.save("ExportPdf.pdf");

          至此,就完成PDF文檔的打印。

          使用SpreadJS和GCExcel搭建LIMS系統(tǒng)的優(yōu)勢(shì)

          • SpreadJS能夠幫助LIMS系統(tǒng)快速實(shí)現(xiàn)數(shù)據(jù)的綁定功能,實(shí)現(xiàn)數(shù)據(jù)自動(dòng)提取,如委托單位信息、例行監(jiān)測(cè)任務(wù)等首次錄入后可直接調(diào)用,且支持調(diào)用歷史任務(wù)時(shí)對(duì)監(jiān)測(cè)項(xiàng)目進(jìn)行修改并生成新的任務(wù)單,無(wú)須重復(fù)錄入,大大減少了人工成本和降低出錯(cuò)率。
          • 使用 SpreadJS 設(shè)計(jì)模板,系統(tǒng)獲取儀器測(cè)試數(shù)據(jù)后填入原始記錄單(預(yù)置計(jì)算公式、修約等)可直接生成 Excel 記錄表,通過選擇報(bào)告模板生成完整的監(jiān)測(cè)報(bào)告,全過程無(wú)需手寫原始記錄,無(wú)需反復(fù)錄入監(jiān)測(cè)數(shù)據(jù),方便快捷,準(zhǔn)確率高。
          • SpreadJS 提供權(quán)限控制的方法,可以規(guī)范修改流程,嚴(yán)格控制報(bào)告修改。
          • 使用Spread可以對(duì)導(dǎo)出的PDF進(jìn)行精確配置。
          • GCExcel完美兼容SpreadJS特性,在后端批量導(dǎo)出完整的PDF實(shí)驗(yàn)報(bào)告,既美觀又高效。

          活中我們經(jīng)常會(huì)碰到空間領(lǐng)紅包“中毒”自動(dòng)發(fā)不良信息的現(xiàn)象,或者是不知不覺的被人盜取了信息的情況。通常這種情況都是XSS漏洞導(dǎo)致的,我們今天就來講解一下關(guān)于XSS漏洞的原理。

          XSS種類:

          反射型

          存儲(chǔ)型

          Dom-based型

          這里面反射型跟持久型都是很常見的,也是用的最廣泛的一種攻擊方式。

          它的主要利用原理是:

          給受害者發(fā)送帶有惡意代碼或腳本的鏈接,如果你點(diǎn)擊了鏈接,只要是被HTML所解析并且執(zhí)行了,那無(wú)論你是否快速關(guān)閉了點(diǎn)開的頁(yè)面,都白瞎了。

          Dom這種XSS漏洞是基于文檔對(duì)象模型的一種漏洞,它的特點(diǎn)是通過url傳入?yún)?shù)去控制觸發(fā)的。

          下面我們主要來說一下反射型跟存儲(chǔ)型XSS的原理,并附上代碼。

          反射型XSS:

          我們平時(shí)常見XSS地方很多都是搜索框(一般網(wǎng)站上都會(huì)有搜索文章什么的),我們可以在這種搜索框里面輸入:

          <script>alert('XSS')</script>

          來驗(yàn)證XSS的漏洞存在與否,如果存在會(huì)彈出一個(gè)編輯框“XSS”,下面我們自己構(gòu)建一個(gè)這樣的搜索框:

          先新搭建好PHP環(huán)境,在站點(diǎn)新建一個(gè)xss.php文件,輸入以下的代碼。

          代碼的意思很簡(jiǎn)單:

          1. 先創(chuàng)建一個(gè)form表單,提交方式設(shè)置為GET,提交給本頁(yè)面(也就是交給下面的PHP代碼去執(zhí)行)
          2. 定義一個(gè)$xss變量
          3. 如果變量不為空的話,輸出$xss的內(nèi)容。

          然后在瀏覽器上訪問的效果應(yīng)該是這樣的:

          這個(gè)時(shí)候我們就可以輸入常規(guī)的信息去搜索,輸入“im liuse”顯示效果如下:

          現(xiàn)在我們改變策略,輸入我們上面說的xss測(cè)試代碼<script>alert('XSS')</script>然后執(zhí)行,你會(huì)看到下圖的效果:

          事實(shí)證明,沒有進(jìn)行過濾,如果我們把這個(gè)地方的<script>alert('XSS')</script>改成其它的代碼,如:

          <script>alert(document.cookie)</script>

          就可以獲取用戶的cookie(cookie記錄了用戶的登錄信息),拿到cookie有什么用呢?

          舉個(gè)例子,比如說拿到你的QQ空間的cookie就可以不需要用戶名密碼登錄你的空間,我們經(jīng)常見到空間好友自動(dòng)轉(zhuǎn)發(fā)一些亂七八糟的東西的圖片文字的,基本都是通過xss漏洞搞的。

          說完反射型XSS我們?cè)賮碚f說存儲(chǔ)型XSS。

          存儲(chǔ)型XSS:

          相對(duì)于反射型XSS,存儲(chǔ)型XSS的檔次確實(shí)高了不少,不過利用難度也相對(duì)提高了。

          什么是存儲(chǔ)型XSS呢?沒錯(cuò)就跟它的名字一樣,是可以儲(chǔ)存起惡意代碼的方式。這種漏洞利用多出現(xiàn)在論壇評(píng)論,后臺(tái)上傳這些地方,可以是圖片也可以是文字。相對(duì)于反射型XSS不同的是,存儲(chǔ)型XSS可以保存在服務(wù)器端(存到數(shù)據(jù)庫(kù))下面我們用代碼舉例:

          我們?cè)谏厦娴膞ss.php文件的基礎(chǔ)上修改一下:

          同樣的代碼還是很容易理解:

          1. 先通過mysql_connect()函數(shù)來連接mysql
          2. 然后自己在mysql中建一個(gè)XSS_test數(shù)據(jù)庫(kù)
          3. 創(chuàng)建一個(gè)XssValue字段來收錄一會(huì)提交進(jìn)的惡意代碼
          4. 如果有數(shù)據(jù)過來,保存到數(shù)據(jù)庫(kù)。

          下面,我們來實(shí)驗(yàn)一下。

          在搜索框同樣輸入我們的XSS代碼:

          你會(huì)發(fā)現(xiàn)貌似前臺(tái)沒有顯示,但去mysql數(shù)據(jù)庫(kù)看已經(jīng)存儲(chǔ)到數(shù)據(jù)庫(kù)了,以后任何人去訪問某個(gè)調(diào)用這個(gè)數(shù)據(jù)庫(kù)的頁(yè)面都會(huì)受影響!

          以上就是簡(jiǎn)單的演示說明,下面我們講講防范過濾。

          過濾實(shí)現(xiàn):

          重點(diǎn)對(duì)象:

          <>(尖括號(hào))、”(引號(hào))、 ‘(單引號(hào))、%(百分比符號(hào))、;(分號(hào))、()(括號(hào))、&(& 符號(hào))、+(加號(hào))

          過濾函數(shù):

          (1)htmlspecialchars() 函數(shù),用于轉(zhuǎn)義處理在頁(yè)面上顯示的文本。

          (2)htmlentities() 函數(shù),用于轉(zhuǎn)義處理在頁(yè)面上顯示的文本。

          (3)strip_tags() 函數(shù),過濾掉輸入、輸出里面的惡意標(biāo)簽。

          (4)header() 函數(shù),使用header("Content-type:application/json"); 用于控制 json 數(shù)據(jù)的頭部,不用于瀏覽。

          (5)urlencode() 函數(shù),用于輸出處理字符型參數(shù)帶入頁(yè)面鏈接中。

          (6)intval() 函數(shù)用于處理數(shù)值型參數(shù)輸出頁(yè)面中。

          好,今天XSS就先介紹到這里了,希望各位一定要認(rèn)識(shí)到網(wǎng)安的重要性!


          主站蜘蛛池模板: 无码少妇一区二区浪潮av| 无码人妻AV免费一区二区三区| 国产成人久久精品区一区二区 | 日本精品无码一区二区三区久久久 | 亚洲丶国产丶欧美一区二区三区| 国产成人亚洲综合一区| 麻豆国产在线不卡一区二区| 无码国产精成人午夜视频一区二区 | 国产亚洲一区二区精品| 精品欧洲av无码一区二区三区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 秋霞午夜一区二区| 国产伦精品一区二区三区免费下载 | 韩国精品一区二区三区无码视频| 精品日本一区二区三区在线观看| 久久人妻无码一区二区| 国产亚洲日韩一区二区三区| 国产丝袜视频一区二区三区| 国模视频一区二区| 日本一区二区三区四区视频| 国产精品无码一区二区在线观 | 日韩精品人妻一区二区中文八零| 蜜桃AV抽搐高潮一区二区| 亚洲AV美女一区二区三区| 免费无码毛片一区二区APP| 麻豆天美国产一区在线播放| 国产综合精品一区二区三区| 一区在线免费观看| 国产成人无码AV一区二区在线观看| 免费无码一区二区三区蜜桃| 亚洲一区无码中文字幕| 少妇特黄A一区二区三区| 免费无码VA一区二区三区| 亚洲一区二区三区在线观看网站| 国产成人久久一区二区三区| 亚洲一区视频在线播放| 亚洲天堂一区二区三区| 国产乱码精品一区二区三区香蕉| 精品无码综合一区| 色偷偷av一区二区三区| 免费看AV毛片一区二区三区|