狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > 濟(jì)南python

網(wǎng)站性能檢測(cè)評(píng)分

注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問(wèn)題,僅供參考。

濟(jì)南python

「面霸實(shí)戰(zhàn)」五天拿下Google、Facebook等硅谷五家公司Offer Facebook視頻課程

img

心愿

關(guān)注

【新智元導(dǎo)讀】一位華裔技術(shù)工程師曾笑寒連續(xù)面試了 LinkedIn、Salesforce、Google、Airbnb 和 Facebook 五家硅谷科技巨頭,最終全部都拿到了 Offer。作者分享了在面對(duì)五家不同的科技公司及不同的崗位,所做的準(zhǔn)備工作、面試技巧以及自己的一些實(shí)踐經(jīng)驗(yàn),希望可以為正在準(zhǔn)備跳槽的工程師提供一些幫助。

在 2017 年 7 月 24 日至 28 日的五天里,一位華裔技術(shù)工程師曾笑寒(https://linkedin/in/xiaohanzeng)連續(xù)面試了 LinkedIn、Salesforce、Google、Airbnb 和 Facebook 五家硅谷科技巨頭,最終也全部都拿到了 Offer。

在此之前,并非計(jì)算機(jī)專(zhuān)業(yè)出身、工作時(shí)間短暫、知識(shí)及經(jīng)驗(yàn)均有限的作者,在經(jīng)歷一次失敗的面試之后,并未丟失信心,而是從頭來(lái)過(guò)。作為一名全職工作者,其在閑暇之余準(zhǔn)備面試,能同時(shí)拿到 5 家科技巨頭的 Offer 這樣的結(jié)果確實(shí)非常地幸運(yùn),但是其背后付出的努力也不容忽視。本文接下來(lái)將與大家分享作者在面對(duì)五家不同的科技公司及不同的崗位,所做的準(zhǔn)備工作、面試技巧以及自己的一些實(shí)踐經(jīng)驗(yàn),希望可以為正在準(zhǔn)備跳槽的工程師提供一些幫助。

以下為譯文:

最初的緣由

起因是 2017 年即今年,我作為一名普通的軟件開(kāi)發(fā)工程師,已經(jīng)在 Groupon 芝加哥總部工作了近三年。這是我的第一份工作,我的團(tuán)隊(duì)和項(xiàng)目都非常贊,我們一起構(gòu)建很酷的東西、在公司內(nèi)部發(fā)揮各自的影響力、發(fā)表論文等等。但是,工作輕松,生活自在,隨著時(shí)間的推移,我發(fā)現(xiàn)我的學(xué)習(xí)速度正逐漸放緩,內(nèi)心開(kāi)始希望迎接新的挑戰(zhàn)。同時(shí)作為一名在芝加哥住了八年的碼工,也非常向往灣區(qū)的優(yōu)秀公司。

生命短暫,職業(yè)生涯則更短。在與妻子溝通并得到她的全力支持之后,我決定采取行動(dòng),做出第一次職業(yè)轉(zhuǎn)變。

準(zhǔn)備

首先我對(duì)機(jī)器學(xué)習(xí)的職位很感興趣,但其實(shí)我申請(qǐng)這五家公司的職位名稱(chēng)和面試過(guò)程都稍有不同。LinkedIn、Google、Facebook 的職位是機(jī)器學(xué)習(xí)工程師,Salesforce 是數(shù)據(jù)工程師,Airbnb 是軟件工程師。因此我需要準(zhǔn)備三個(gè)不同領(lǐng)域:算法和編程、機(jī)器學(xué)習(xí)和系統(tǒng)設(shè)計(jì)。

由于白天還有一份全職工作,所以只能晚上喝周末抽出一些時(shí)間準(zhǔn)備面試,總體而言,一共花了 2-3 個(gè)月的時(shí)間。以下就是我如何在這三個(gè)方面做準(zhǔn)備。

算法和編程

的確,算法和編程面試并不是評(píng)估開(kāi)發(fā)人員所有技能的最好方法,但短時(shí)間內(nèi)沒(méi)有更好的辦法來(lái)判斷是否是一名優(yōu)秀的工程師。

這一塊其實(shí)是最好也最難準(zhǔn)備的。一方面有許多的網(wǎng)站提供了大量的題目可以練習(xí),另一方面也需要投入大量時(shí)間精力。我主要使用 Leetcode 和 Geeksforgeeks 進(jìn)行練習(xí),還推薦 Hackerrank 和 Lintcode。我花了幾個(gè)星期的時(shí)間過(guò)一遍常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)和算法,然后針對(duì)性地重點(diǎn)關(guān)注我不太熟悉的領(lǐng)域,最后解決了一些常見(jiàn)問(wèn)題。由于我時(shí)間有限,我通常每天做兩題。

我的想法是:

多練習(xí),沒(méi)有捷徑。與其做完 Leetcode 上所有 600 道題,不如覆蓋全部類(lèi)型并徹底理解每一道題。我總共做了大約 70 道題,我認(rèn)為已經(jīng)足夠了。我的想法是,如果 70 道題還沒(méi)有幫助,那么你可能方法有問(wèn)題,做 700 道也沒(méi)有任何幫助。做最難的題,其余的都會(huì)變得更加容易。如果一道題超過(guò)兩小時(shí)都做不完,可以看答案了。再花時(shí)間思考并不值得。做完一道題后一定要看答案。我很佩服那些一行 Python 代碼解決問(wèn)題的人,雖然有時(shí)依賴(lài)語(yǔ)言的某個(gè)特性,但實(shí)在是很精妙。使用你最熟悉的常用語(yǔ)言,在面試時(shí)可以用到。系統(tǒng)設(shè)計(jì)

系統(tǒng)設(shè)計(jì)領(lǐng)域與實(shí)際工作經(jīng)驗(yàn)更密切相關(guān)。 如果你有不少系統(tǒng)設(shè)計(jì)的經(jīng)驗(yàn),那么花的時(shí)間可以相對(duì)少一些。雖然是很看經(jīng)驗(yàn),但也還是可以準(zhǔn)備的,網(wǎng)上也有很多的經(jīng)驗(yàn)貼和練習(xí)題。我主要閱讀關(guān)于系統(tǒng)設(shè)計(jì)面試、大型系統(tǒng)架構(gòu)、案例研究相關(guān)文章。

個(gè)人感覺(jué)這個(gè)領(lǐng)域面試時(shí)會(huì)涉及很多問(wèn)題,包括但不限于系統(tǒng)架構(gòu)、面向?qū)ο蟮脑O(shè)計(jì)、數(shù)據(jù)庫(kù)模式設(shè)計(jì)、分布式系統(tǒng)設(shè)計(jì)、可擴(kuò)展性等。因?yàn)槲抑饕嬖嚨穆毼皇菣C(jī)器學(xué)習(xí)相關(guān)的,所以這次面試遇到的 session 少一些(主要是 Airbnb)。

這些是我認(rèn)為比較有幫助的一些資料:

http://blog.gainlo.cohttp://horicky.blogspothttps://hiredintech/classrooms/system-design/lesson/52http://lecloud/tagged/scalabilityhttp://tutorials.jenkov/software-architecture/index.htmlhttp://highscalability/雖然系統(tǒng)設(shè)計(jì)面試會(huì)涵蓋很多主題,如何回答這些問(wèn)題還是有一些通用思路的:

先明白需求,然后考慮大框架,最后是具體設(shè)計(jì)。不要馬上跳到細(xì)節(jié)上,而不弄明白需求是什么。沒(méi)有完美的系統(tǒng)設(shè)計(jì)。根據(jù)需要做出取舍(trade-off)。盡管如此,準(zhǔn)備系統(tǒng)設(shè)計(jì)面試的最好方法就是坐下來(lái)設(shè)計(jì)一個(gè)系統(tǒng),深入探索你平時(shí)使用的工具、框架和庫(kù)。舉個(gè)例子,要是工作中用到 HBase,有的人可能就只是簡(jiǎn)單的用一下 Client 跑一些 DDL,做一些 Get,但有的人可能就會(huì)攝入一些了解整個(gè)系統(tǒng)的設(shè)計(jì),包括整個(gè)讀 / 寫(xiě)流程、如何保證很強(qiáng)的一致性、次要 / 主要壓縮起到作用、LRU 緩存和 Bloom Filter 的作用等等。你甚至可以將 HBase 和 Cassandra 進(jìn)行比較,看看它們?cè)O(shè)計(jì)上的相似點(diǎn)和不同之處。面試時(shí)如果要求你設(shè)計(jì)一個(gè)分布式的鍵值存儲(chǔ),你就不會(huì)覺(jué)得太突然。

許多博客也能提供很多知識(shí),比如 Hacker Noon、一些公司的工程博客以及開(kāi)源項(xiàng)目的官方文檔。

最重要的是要保持好奇心和謙虛。像海綿一樣吸收知識(shí)的養(yǎng)分。

機(jī)器學(xué)習(xí)

機(jī)器學(xué)習(xí)面試可以分為理論和產(chǎn)品設(shè)計(jì)兩個(gè)方面。

除非你有機(jī)器學(xué)習(xí)研究經(jīng)驗(yàn)或者機(jī)器學(xué)習(xí)課程學(xué)得很好,那么閱讀一些教科書(shū)是很有幫助的。經(jīng)典教材如《The Elements of Statistical Learning》和《Pattern Recognition and Machine Learning》都很有幫助,如果你對(duì)特定領(lǐng)域感興趣,你可以閱讀更多相關(guān)內(nèi)容。

確保你理解如偏差 / 方差權(quán)衡、過(guò)度擬合、梯度下降,L1/L2 正則化、貝葉斯定理、協(xié)同過(guò)濾、降維等基本概念。熟悉常用公式與模型推導(dǎo),如貝葉斯定理,如邏輯回歸和支持向量機(jī)。嘗試實(shí)現(xiàn)簡(jiǎn)單的模型,如決策樹(shù)和 K 均值聚類(lèi)。如果你在簡(jiǎn)歷上提到一些模型,確保你對(duì)其完全理解并能評(píng)價(jià)其優(yōu)缺點(diǎn)。

對(duì)于機(jī)器學(xué)習(xí)產(chǎn)品設(shè)計(jì),要了解構(gòu)建機(jī)器學(xué)習(xí)產(chǎn)品的一般過(guò)程。我是這樣做的:

找出目標(biāo)是什么:預(yù)測(cè)、推薦、聚類(lèi)、搜索等。選擇正確的算法:監(jiān)督與無(wú)監(jiān)督、分類(lèi)與回歸、廣義線性模型 / 決策樹(shù) / 神經(jīng)網(wǎng)絡(luò)等。為做出的選擇給出原因。根據(jù)可用數(shù)據(jù)選擇 / 設(shè)計(jì)相關(guān)功能。選擇模型性能指標(biāo)??梢钥紤]如何為生產(chǎn)優(yōu)化模型。我想再次強(qiáng)調(diào)保持好奇心和持續(xù)學(xué)習(xí)的重要性。不要僅僅用 Spark MLlib 或者 XGBoost 簡(jiǎn)單地調(diào)用 API 訓(xùn)練出一個(gè)模型,我更推薦去研究為什么 Stochastic gradient descent 適合分布式訓(xùn)練,又或者了解 XGBoost 和通常的 GBDT 有什么區(qū)別,包括對(duì) Loss Function 的定義有何特別之處,為什么用到二階導(dǎo)等等。

面試過(guò)程

最開(kāi)始我在 LinkedIn 上回復(fù) HR 的留言,并請(qǐng)其給我推薦職位。在某家明星創(chuàng)業(yè)公司求職失敗后(我稍后會(huì)談到),我努力準(zhǔn)備了好幾個(gè)月,在 HR 的幫助下,我在灣區(qū)安排了整整一周的現(xiàn)場(chǎng)面試。我周日抵達(dá)灣區(qū),在世界上最好的幾家科技公司五天面試了大約三十位面試官,很幸運(yùn)地,得到了這五家的工作機(jī)會(huì)。

電話面試

所有電話面試都是標(biāo)準(zhǔn)的。唯一的區(qū)別是面試時(shí)間:LinkedIn 面試 1 小時(shí),而 Facebook 和 Airbnb 則是 45 分鐘。

熟練程度是電話面試的關(guān)鍵,因?yàn)闀r(shí)間有限,通常你只有一次機(jī)會(huì)。你必須很快判斷出問(wèn)題類(lèi)型,并給出一個(gè)宏觀解決方案。一定要和面試官溝通你的思路,說(shuō)明你的意圖。這可能一開(kāi)始會(huì)讓你速度慢一點(diǎn),但溝通比任何事情都重要,會(huì)對(duì)面試有很大幫助。不要死背答案,因?yàn)槊嬖嚬倏隙〞?huì)一眼看穿。

對(duì)于機(jī)器學(xué)習(xí)的職位,一些公司會(huì)問(wèn)機(jī)器學(xué)習(xí)相關(guān)問(wèn)題,因此面試前溫習(xí)鞏固一下機(jī)器學(xué)習(xí)方面的知識(shí)與技能。

為了更好地利用我的時(shí)間,我在同一個(gè)下午約了三個(gè)電話面試,每個(gè)之間間隔 1 小時(shí)休息。這樣的做法不一定適合所有人,好處是可以趁熱打鐵狀態(tài)好,壞處是如果一個(gè)沒(méi)面好,后面的面試可能會(huì)受到影響。

同時(shí)面多家公司的一個(gè)好處是有時(shí)候能夠省去某些環(huán)節(jié)。有些硅谷公司規(guī)定對(duì)于灣區(qū)以外的面試人要進(jìn)行兩輪電話面試。我之所以能夠省去 Airbnb 和 Salesforce 第二輪電話面試,是因?yàn)閷?duì)方得知我一輪電話面試就拿到了 LinkedIn 和 Facebook 現(xiàn)場(chǎng)面試的機(jī)會(huì)。

更令人吃驚的是,Google 甚至沒(méi)電話面試就請(qǐng)我參加現(xiàn)場(chǎng)面試,這也是因?yàn)閷?duì)方得知我下周要來(lái)灣區(qū)參加四個(gè)現(xiàn)場(chǎng)面試。我知道這會(huì)讓我很累,但是,沒(méi)有人會(huì)拒絕 Google 的現(xiàn)場(chǎng)面試邀請(qǐng)!

現(xiàn)場(chǎng)面試

五家公司雖然都是 IT 公司,但處于不同的領(lǐng)域,文化上也各有千秋。我簡(jiǎn)單說(shuō)一說(shuō)自己對(duì)它們的感覺(jué)。另外雖然不算是吃貨,但作為民以食為天的中國(guó)人,自然也要對(duì)午飯進(jìn)行一下評(píng)價(jià)。

LinkedIn

這是我第一個(gè)現(xiàn)場(chǎng)面試,我在 LinkedIn 的 Sunnyvale 辦公室。作為專(zhuān)注于職場(chǎng)社交的公司,LinkedIn 的特點(diǎn)是端莊、大氣、職業(yè)化,內(nèi)部文化也相應(yīng)地非常專(zhuān)業(yè)。員工的穿著都是商務(wù)休閑裝,整體給人一種職場(chǎng)精英的感覺(jué),與他們的宗旨非常契合。

面試方面,編程和機(jī)器學(xué)習(xí)各 1 小時(shí)。編程面試都是標(biāo)準(zhǔn)問(wèn)題,但機(jī)器學(xué)習(xí)面試可能會(huì)有些困難。盡管如此,我之前收到 HR 的電子郵件,里面包含了非常有用的準(zhǔn)備材料,因此面試中沒(méi)有太出乎意料的事情。我聽(tīng)說(shuō) LinkedIn 有硅谷最好的食堂,從我的實(shí)際體驗(yàn)來(lái)看,這差不多是真的。

LinkedIn 被微軟收購(gòu)以后少了經(jīng)濟(jì)壓力,使其可以放開(kāi)手做非??岬氖虑?。LinkedIn 新添加的視頻和專(zhuān)業(yè)廣告等功能令人興奮。作為一家專(zhuān)注于職業(yè)發(fā)展的公司,LinkedIn 優(yōu)先考慮其員工的職業(yè)成長(zhǎng)。目前包括 ads relevance、feed ranking 在內(nèi)很多組都在招人,所以如果你想加入,那就趕快行動(dòng)。

Salesforce Einstein

Einstein 是 Salesforce 近幾年主推的明星產(chǎn)品,擁有一個(gè)明星團(tuán)隊(duì)。這個(gè)團(tuán)隊(duì)非常新,感覺(jué)非常像初創(chuàng)公司。團(tuán)隊(duì)主要是使用 Scala,Tech stack 都是 Akka/Play/Spark 那一套,這也是最吸引我的一點(diǎn)。我最初接觸到 Einstein 是在 2017 年 4 月的 ScalaDays 上聽(tīng)了 Matthew 以《Type safety in machine learning》為題的演講,之后又在 Spark Summit West 上聽(tīng)了 Leah 的演講。喜歡 Scala 的人一定不要錯(cuò)過(guò)。

面試地點(diǎn)是 Salesforce 位于 Palo Alto 的辦公室。這個(gè)團(tuán)隊(duì)很有凝聚力,能保證工作生活平衡。每個(gè)人都熱愛(ài)并真正享受自己做的東西。與其他現(xiàn)現(xiàn)場(chǎng)面試相比,四場(chǎng) session 總共時(shí)間略短,總體側(cè)重于 Data engineering 和 System design。另外需要注意的是,coding 也是要上機(jī)跑的。面試后,Matthew 甚至帶我參觀了惠普的車(chē)庫(kù)。

Google

當(dāng)今業(yè)界領(lǐng)頭人,沒(méi)有什么可說(shuō)的。最重要的印象就是大,非常非常大。去見(jiàn)我 Google 的朋友的時(shí)候騎自行車(chē)騎了 20 分鐘。中午吃飯排隊(duì)人很多。

我在 Mountain View 的許多樓里的一幢進(jìn)行面試。我不知道具體是哪一幢,因?yàn)?Google 真的非常大。

面試官看起來(lái)都很年輕,他們一說(shuō)話就顯得很聰明。和他們一起工作一定是非常愉快的。

值得注意的是 Google 特別強(qiáng)調(diào)算法的復(fù)雜度,確保你真的明白時(shí)間和空間復(fù)雜度,能夠針對(duì)瓶頸進(jìn)行優(yōu)化!這一點(diǎn)與別的公司不同。

Airbnb

快速擴(kuò)張的 Unicorn 公司,擁有非常獨(dú)特的公司文化以及可能是硅谷最美麗的辦公室。推出了新產(chǎn)品包括 “體驗(yàn)” 以及餐館預(yù)訂服務(wù)、在高端小眾市場(chǎng)進(jìn)行嘗試、以及進(jìn)入中國(guó)市場(chǎng),這些都為 Airbnb 的前景增添了積極因素。如果可以承受高風(fēng)險(xiǎn),并希望獲得快速增長(zhǎng)的 pre-IPO 經(jīng)驗(yàn),那么 Airbnb 是完美的選擇。

Airbnb 的 coding 面試有點(diǎn)獨(dú)特,要求上機(jī),并且每個(gè) Session 只有 45 分鐘時(shí)間,某些題目的難度也相當(dāng)大,所以壓力還是不小的。

Airbnb 獨(dú)樹(shù)一幟的跨職能面試,這也是我最享受的,我和面試官輕松交流。Airbnb 認(rèn)真對(duì)待公司文化,技術(shù)上優(yōu)秀并不能保證拿到 Offer。

總的來(lái)說(shuō),我認(rèn)為 Airbnb 的現(xiàn)場(chǎng)面試流程最長(zhǎng),環(huán)節(jié)最多,題目很難,總體感覺(jué)最累。如果你有興趣,一定要了解他們的文化和核心價(jià)值觀。

Facebook

另一個(gè)仍在高速發(fā)展的巨人,與 Google 相比規(guī)模更小,速度更快。在社交網(wǎng)絡(luò)市場(chǎng)鋪開(kāi)了全面產(chǎn)品線,處于壟斷地位,以及在 AI 和 VR 方面的大量投資,未來(lái) Facebook 只有更多的增長(zhǎng)潛力。有像 Yann LeCun 和 Yangqing Jia 這樣的明星,如果你對(duì)機(jī)器學(xué)習(xí)感興趣的話,這是一個(gè)完美的地方。

我的面試是在樓頂有花園的海景房 Building 20,也是扎克伯格辦公的地方。

Facebook 的整個(gè)面試過(guò)程我自己感覺(jué)是最不好的,一方面是因?yàn)橐呀?jīng)是第五場(chǎng)面試,整個(gè)人已經(jīng)很疲勞了,另外可能是 Facebook 的規(guī)定,面試官都沒(méi)有對(duì)我的答案給出特別明顯的好與不好的信號(hào),雖然我覺(jué)得自己的答案沒(méi)有錯(cuò),但也稍微有些拿不準(zhǔn)自己的表現(xiàn)。

兩場(chǎng) Coding 還算是正常,兩道題都在面試官的提醒下總共給出了兩種解法,有一場(chǎng)還問(wèn)了兩道題。下午我已經(jīng)感覺(jué)自己生病了,頭疼得厲害,最后硬撐著完成了面試,出來(lái)以后感覺(jué)不太好,沒(méi)想到最后竟然也拿到 Offer 了。

總體來(lái)說(shuō),我覺(jué)得 Facebook 的工作人員堅(jiān)信其公司愿景,并為他們正在建設(shè)?...

基于nose-html-report定制測(cè)試報(bào)告 行業(yè)視頻課程

img

裘海冬

關(guān)注

環(huán)境準(zhǔn)備

pip3.5 install nose-html-report

安裝目錄文件:

├── __init__.py├── __pycache__│ └── __init__.cpython-35.pyc└── templates├── report2.jinja2└── report.html

主要修改 __init__.py文件及測(cè)試報(bào)告模板文件report2.jinja2

jinja2模板有自己的語(yǔ)法,具體可以谷歌,如:

if elif else endif 條件語(yǔ)法 :

{% if not test.failed %}{% set test_status="Pass" %}{% elif test.failed and test.type == 'skipped' %}{% set test_status="Skip" %}{% elif test.failed and test.type != 'skipped' %}{% set test_status="Fail" %}{%- else -%}{% set test_status="Error" %}{%- endif %}

for語(yǔ)法:

L{% for test in group.tests %}

{%- endfor -%}

測(cè)試報(bào)告定制的實(shí)現(xiàn)主要包括如下類(lèi)

class OutputRedirector(object): # 輸出重定向類(lèi)

包含一個(gè)文件對(duì)象fp,主要包括如下方法

def write(self, s): def writelines(self, lines):def flush(self):def readall(self):

class Group(object): # 測(cè)試用例組

主要包括如下兩個(gè)對(duì)象

self.stats = {'errors': 0, 'failures': 0, 'passes': 0, 'skipped': 0} # 用例組的結(jié)果狀態(tài)統(tǒng)計(jì)self.tests = [] # 用例組中具體測(cè)試用例統(tǒng)計(jì)

class HtmlReport(Plugin): # 測(cè)試報(bào)告插件

構(gòu)造函數(shù)def startTest(self, test): # 重定向輸出初始化def complete_test_output(self, err_msg='', traceback=''): # 測(cè)試完成后的斷開(kāi)重定向鏈接同時(shí)返回緩存數(shù)據(jù)def begin(self):def complete_global_output(self):def options(self, parser, env): 通過(guò)nosetests運(yùn)行測(cè)試用例時(shí)攜帶的命令選項(xiàng) def configure(self, options, config): 通過(guò)命令配置進(jìn)行實(shí)際相關(guān)配置兩邊的加載 根據(jù)配置加載指定模板def report(self, stream): 基于模板,對(duì)模板中的變量進(jìn)行賦值,寫(xiě)測(cè)試報(bào)告 通過(guò)self.report_data,以group為單位,對(duì)測(cè)試結(jié)果結(jié)果進(jìn)行傳遞,group中包含stats及tests對(duì)象,分別記錄該測(cè)試組中測(cè)試運(yùn)行狀態(tài)及具體用例信息""Writes an Xunit-formatted XML fileThe file includes a report of test errors and failures."""self.stats['total'] = sum(self.stats.values())for group in self.report_data.values(): group.stats['total'] = sum(group.stats.values())self.report_file.write(self.jinja.get_template(os.path.basename(self.report_template_filename)).render( report=self.report_data, stats=self.stats, start_time = str(self.test_start_time)[:19], rawoutput=self._format_output(selfplete_global_output()), duration_time = self.test_duration_time - datetime.resolution))self.report_file.close()if self.config.verbosity > 1: stream.writeln("-" * 70) stream.writeln("HTML: %s" % self.report_file.name)def addSuccess(self, test): # 測(cè)試成功 返回的狀態(tài)信息及用例詳情name = id_split(test.id())group = self.report_data[name[0]]self.stats['passes'] += 1group.stats['passes'] += 1group.tests.append({ 'name': name[-1], 'failed': False, 'output': self._format_output(selfplete_test_output()), 'shortDescription': test.shortDescription(), 'time': str(datetime.now() - self.test_start_time),})def addError(self, test, err, capt=None): # 測(cè)試失敗 返回的狀態(tài)信息及用例詳情、錯(cuò)誤信息等"""Add error output to Xunit report."""exc_type, exc_val, tb = errtb = ''.join(traceback.format_exception( exc_type, exc_val if isinstance(exc_val, exc_type) else exc_type(exc_val), tb))name = id_split(test.id())group = self.report_data[name[0]]if issubclass(err[0], SkipTest): type = 'skipped' self.stats['skipped'] += 1 group.stats['skipped'] += 1else: type = 'error' self.stats['errors'] += 1 group.stats['errors'] += 1group.tests.append({ 'name': name[-1], 'failed': True, 'type': type, 'errtype': nice_classname(err[0]), 'message': exc_message(err), 'tb': self._format_output(tb), 'output': self._format_output(selfplete_test_output(exc_message(err), tb)), 'shortDescription': test.shortDescription(), 'time': str(datetime.now() - self.test_start_time),})def addFailure(self, test, err, capt=None): # 測(cè)試失敗 返回的狀態(tài)信息及用例詳情、失敗詳情"""Add failure output to Xunit report."""exc_type, exc_val, tb = errtb = ''.join(traceback.format_exception( exc_type, exc_val if isinstance(exc_val, exc_type) else exc_type(exc_val), tb))name = id_split(test.id())group = self.report_data[name[0]]self.stats['failures'] += 1group.stats['failures'] += 1group.tests.append({ 'name': name[-1], 'failed': True, 'errtype': nice_classname(err[0]), 'message': exc_message(err), 'tb': self._format_output(tb), 'output': self._format_output(selfplete_test_output(exc_message(err), tb)), 'shortDescription': test.shortDescription(), 'time': str(datetime.now() - self.test_start_time),})def _format_output(self, o): 字符相關(guān)編碼

if isinstance(o, str): # return o.decode('latin-1') return o.decode('UTF-8') else: return o

img

在線咨詢(xún)

建站在線咨詢(xún)

img

微信咨詢(xún)

掃一掃添加
動(dòng)力姐姐微信

img
img

TOP