小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

記一次面試經(jīng)歷 · TesterHome

 huowufenghuang 2019-02-15

背景

2018年的冬天很冷,整個行業(yè)都不景氣,很多公司面臨裁員、倒閉。我們公司也沒能逃過此劫,公司融資不到位欠薪2個月,實在沒有辦法,樓主也開始加入找工作的大軍。在招聘網(wǎng)站上投了好幾個自己感興趣的公司,也僅僅收到一個面試邀請,面試結(jié)果也不理想,被刷了。在這里給大家分享下面試題。

面試題

面試主要考察了以下幾個方面:

  • 對敏捷開發(fā)的理解
  • 測試流程
  • BUG管理
  • 用例設(shè)計
  • UI自動化,接口自動化
  • 持續(xù)集成
  • 算法題
  • Linux命令
  • 性能測試

回答

1. 對敏捷開發(fā)的理解

雖然目前公司處于敏捷開發(fā)的模式中,但平時自己也只是服從公司的流程,沒有仔細去思考過敏捷開發(fā)。所以這個問題回答的也不好。

維基百科: 敏捷軟件開發(fā)(英語:Agile software development),又稱敏捷開發(fā),是一種從1990年代開始逐漸引起廣泛關(guān)注的一些新型軟件開發(fā)方法,是一種應(yīng)對快速變化的需求的一種軟件開發(fā)能力。它們的具體名稱、理念、過程、術(shù)語都不盡相同,相對于“非敏捷”,更強調(diào)程序員團隊與業(yè)務(wù)專家之間的緊密協(xié)作、面對面的溝通(認為比書面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團隊、能夠很好地適應(yīng)需求變化的代碼編寫和團隊組織方法,也更注重軟件開發(fā)過程中人的作用。

個人理解:

  • 實施敏捷開發(fā)的流程:要去所有人參加需求評審,功能分卡,估點,每日站會,迭代回顧

  • 為了能夠響應(yīng)快速變化的需求或頻繁的交付,必須依賴完善的自動化工具鏈,從單元測試---接口自動化---UI自動化---部署---線上監(jiān)控 整套的流程實現(xiàn)自動化

  • 測試驅(qū)動開發(fā),在編寫功能實現(xiàn)代碼前編寫單元測試代碼(實施上來講比較困難,開發(fā)能夠完成單元測試就不錯了)

  • 持續(xù)集成,原則是盡量使用master分支進行開發(fā),頻繁地集成,即使編譯報錯也能夠迅速定位修復(fù)。杜絕多分支的開發(fā)方式,合并分支是一個繁瑣的工作,容易產(chǎn)生眾多沖突問題,對測試也增加了工作量

  • 注重面對面的溝通,減少冗余的文檔

  • 重構(gòu)貫穿整個開發(fā)流程,每次check代碼時對代碼進行重構(gòu),使代碼盡量簡單,優(yōu)美,可擴展,完善的單元測試是你重構(gòu)的保障

  • 定時進行Code Review

2. 測試流程和BUG管理

根據(jù)自己公司實際情況回答

3. UI自動化和接口自動化

  • 簡單的問了下框架的架構(gòu)

  • UI自動化怎么處理界面展示延遲的問題?
    Robotium查找元素默認20s等待時間

  • HTTP常見狀態(tài)碼

  • 接口自動化中怎么測試重定向的接口?(記不清了)
    不懂。這個沒答上來

4. 持續(xù)集成

  • 自動化測試多久構(gòu)建一次?如何搭建jenkins?代碼管理使用的是什么?jenkins上如何配置ssh的方式從git拉取代碼?

5. 算法題

題目:完成一個函數(shù),實現(xiàn)功能為判斷一個字符串是否是一個合法的ip地址
輸入:任意字符串
輸出:如果是一個合法ip地址,返回true;否則,返回false
舉例:輸入10.0.0.1,輸出true;輸入aaaa,輸出false
要求:
1.可以用c/c++/java/php/python等任意熟悉語言,但不能使用正則表達式等已有算法;
2.根據(jù)等價類和邊界值劃分等測試方法,對寫好的代碼羅列出測試點并完成單元測試用例的代碼部分

分析:此題考察了基本網(wǎng)絡(luò)知識,代碼能力,用例設(shè)計能力

合法IP地址當(dāng)時寫的是0.0.0.0~255.255.255.255 其實錯了,應(yīng)該是1.0.0.0~255.255.255.255

0.0.0.0表示的是所有IP的一個集合,不算真正意義上的IP地址


import unittest

# 舉例:輸入10.0.0.1,輸出true;輸入aaaa,輸出false
# 1.0.0.0 ~ 255.255.255.255

def assert_ip(ip_str):

# 字符串切割
ip_list = ip_str.strip().split('.')
if len(ip_list) != 4:
print('列表元素不等于4')
return False
try:
# 0開始的IP不合法
if int(ip_list[0]) == 0:
print('以0開始不合法')
return False
for ip in ip_list:
if len(ip) > 1 and ip.startswith('0'):
print('長度大于1不能以0開始')
return False
if 0 <= int(ip) <= 255:
pass
else:
print('大小不在0-255')
return False
except Exception as e:
print(e)
return False
return True


class TestIp(unittest.TestCase):

def test_01(self):
ip1 = '10.0.0.1'
self.assertTrue(assert_ip(ip1))

def test_02(self):
ip2 = '0.0.0.0'
self.assertFalse(assert_ip(ip2))

def test_03(self):
ip3 = '255.255.255.255'
self.assertTrue(assert_ip(ip3))

def test_04(self):
ip4 = '255.255.255.256'
self.assertFalse(assert_ip(ip4))

def test_05(self):
ip5 = '0.0.0.1'
self.assertFalse(assert_ip(ip5))

def test_06(self):
ip6 = '-1.2.3.4'
self.assertFalse(assert_ip(ip6))

def test_07(self):
ip7 = ''
self.assertFalse(assert_ip(ip7))

def test_08(self):
ip8 = '0.2.11'
self.assertFalse(assert_ip(ip8))

def test_09(self):
ip9 = '10.0.0.0.1'
self.assertFalse(assert_ip(ip9))

def test_10(self):
ip10 = 'aa.bb.cc.dd'
self.assertFalse(assert_ip(ip10))

def test_11(self):
ip11 = '1 192.168.1.1 '
self.assertFalse(assert_ip(ip11))

def test_12(self):
ip12 = '1.00.0.0'
self.assertFalse(assert_ip(ip12))

def test_13(self):
ip13 = 'aaaaa'
self.assertFalse(assert_ip(ip13))

if __name__ == '__main__':

unittest.main()

單元測試點:

  1. IP不含字符’ . ’
  2. IP切割字符串后列表大小 =4 < 4 >4 的三種情況
  3. 字符串中包含空格(左右空格,中間空格)
  4. 輸入字符串為空
  5. 輸入合法IP 10.0.0.1
  6. 輸入合法IP 1.0.0.0
  7. 輸入合法IP 255.255.255.255
  8. 輸入非法IP 0.0.0.1
  9. 輸入非法IP 255.255.255.256
  10. 輸入非法IP -1.2.3.4
  11. 輸入字符串中包含非數(shù)字aa.10.11.dd
  12. 輸入特殊字符串 .@ddj.%^&111.1.
  13. 輸入非法IP 172.16.01.06

面試官又讓我分析unittest源碼...我表示沒看過...GG(我簡歷可沒寫精通unittest~~~)

于是又讓我用正則表達來寫,心中一群草泥馬飄過,雖說平時會使用正則,但都是百度現(xiàn)成的,真要自己寫都點難度。。。

網(wǎng)上找的:

^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$


import re

def assert_ip_by_re(ip_str):
pattern = '^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.' \
'(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.' \
'(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.' \
'(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$'
re_compile = re.compile(pattern)
if re_compile.match(ip_str):
return True
else:
return False
  • 拓展 使用第三方庫IPy

注意:IPy不會處理0.0.0.0這種IP,認為是合法的。類似 198.01.003.001 這種輸入,會自動舍去前面的0,也認為是合法的。


import IPy

def assert_ip(address):
try:
IPy.IP(address)
return True
except Exception as e:
return False

6. Linux命令

  • 打印日志文件所有有username的行

cat xxx.log | gerp 'username' 忽略大小寫cat xxx.log | gerp -i 'username'

  • 獲取當(dāng)前目錄下占用磁盤空間最大的3個文件或目錄

當(dāng)時沒寫出來,只知道可以用ls head命令,平時用sort命令太少了

ls -al | sort -rnk 5 | head -3

sort -n是按照數(shù)字大小排序,-r是以相反順序,-k是指定需要排序的欄位,-t指定欄位分隔符(不寫默認是空格和\t)

  • 查看CPU 內(nèi)存占用命令

top

  • adb常用命令

7. 性能測試

沒做過,略

8. 用例設(shè)計

對客戶端重構(gòu)登錄模塊進行用例設(shè)計,只有用戶名,密碼和登錄。不考慮其他功能。

這個題雖然簡單,但我答得沒條理,上來就開始陳述我的測試用例,只考慮了功能方面,沒有養(yǎng)成多維度系統(tǒng)得用例設(shè)計習(xí)慣,估計也是這個原因面試掛了。。。
重新整理用例:

  • 功能性
    輸入框的字符長度限制、特殊字符處理、密碼輸入顯示*、不輸入用戶名和密碼點擊登錄是否調(diào)用接口?只輸入用戶名、只輸入密碼?錯誤用戶名、錯誤密碼?登錄成功后是否有其他配置項拉???登錄按鈕防重按?

  • 安全性
    密碼是否加密傳輸?SQL注入?

  • 易用性
    錯誤提示是否友好?UI界面風(fēng)格?

  • 兼容性
    app升級后老用戶是否能登錄成功?新用戶登錄?

總結(jié)

從最近找工作發(fā)現(xiàn)測試的要求是越來越高了,需要會的技能也越來越多,功能、自動化、性能、安全、寫測試工具、測試平臺...甚至運維的活也要測試來干 - -! 只能說路漫漫其修遠兮~ 繼續(xù)找窩。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多