使用斷言表達(dá)式,通常會(huì)有人誤用它,所以我決定寫(xiě)一篇文章來(lái)說(shuō)明何時(shí)使用斷言,什么時(shí)候不用。
創(chuàng)新互聯(lián)長(zhǎng)期為上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為桃山企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,桃山網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
為那些還不清楚它的人,Python的assert是用來(lái)檢查一個(gè)條件,如果它為真,就不做任何事。如果它為假,則會(huì)拋出AssertError并且包含錯(cuò)誤信息。例如:
py x = 23
py assert x 0, "x is not zero or negative"
py assert x%2 == 0, "x is not an even number"
Traceback (most recent call last):
File "", line 1, in
AssertionError: x is not an even number
很多人用assert作為一個(gè)很快和容易的方法來(lái)在參數(shù)錯(cuò)誤的時(shí)候拋出異常。但這樣做是錯(cuò)的,非常錯(cuò)誤,有兩個(gè)原因。首先AssertError不是在測(cè)試參數(shù)時(shí)應(yīng)該拋出的錯(cuò)誤。你不應(yīng)該像這樣寫(xiě)代碼:
if not isinstance(x, int):
raise AssertionError("not an int")
你應(yīng)該拋出TypeError的錯(cuò)誤,assert會(huì)拋出錯(cuò)誤的異常。
但是,更危險(xiǎn)的是,有一個(gè)關(guān)于assert的困擾:它可以被編譯好然后從來(lái)不執(zhí)行,如果你用 –O 或 –oo 選項(xiàng)運(yùn)行Python,結(jié)果不保證assert表達(dá)式會(huì)運(yùn)行到。當(dāng)適當(dāng)?shù)氖褂胊ssert時(shí),這是未來(lái),但是當(dāng)assert不恰當(dāng)?shù)氖褂脮r(shí),它會(huì)讓代碼用-O執(zhí)行時(shí)出錯(cuò)。
那什么時(shí)候應(yīng)該使用assert?沒(méi)有特定的規(guī)則,斷言應(yīng)該用于:
防御型的編程
運(yùn)行時(shí)檢查程序邏輯
檢查約定
程序常量
檢查文檔
(在測(cè)試代碼的時(shí)候使用斷言也是可接受的,是一種很方便的單元測(cè)試方法,你接受這些測(cè)試在用-O標(biāo)志運(yùn)行時(shí)不會(huì)做任何事。我有時(shí)在代碼里使用assert False來(lái)標(biāo)記沒(méi)有寫(xiě)完的代碼分支,我希望這些代碼運(yùn)行失敗。盡管拋出NotImplementedError可能會(huì)更好。)
關(guān)于斷言的意見(jiàn)有很多,因?yàn)樗艽_保代碼的正確性。如果你確定代碼是正確的,那么就沒(méi)有用斷言的必要了,因?yàn)樗麄儚膩?lái)不會(huì)運(yùn)行失敗,你可以直接移除這些斷言。如果你確定檢查會(huì)失敗,那么如果你不用斷言,代碼就會(huì)通過(guò)編譯并忽略你的檢查。
在以上兩種情況下會(huì)很有意思,當(dāng)你比較肯定代碼但是不是絕對(duì)肯定時(shí)??赡苣銜?huì)錯(cuò)過(guò)一些非常古怪的情況。在這個(gè)情況下,額外的運(yùn)行時(shí)檢查能幫你確保任何錯(cuò)誤都會(huì)盡早地被捕捉到。
另一個(gè)好的使用斷言的方式是檢查程序的不變量。一個(gè)不變量是一些你需要依賴它為真的情況,除非一個(gè)bug導(dǎo)致它為假。如果有bug,最好能夠盡早發(fā)現(xiàn),所以我們?yōu)樗M(jìn)行一個(gè)測(cè)試,但是又不想減慢代碼運(yùn)行速度。所以就用斷言,因?yàn)樗茉陂_(kāi)發(fā)時(shí)打開(kāi),在產(chǎn)品階段關(guān)閉。
一個(gè)非變量的例子可能是,如果你的函數(shù)希望在它開(kāi)始時(shí)有數(shù)據(jù)庫(kù)的連接,并且承諾在它返回的時(shí)候仍然保持連接,這就是函數(shù)的不變量:
def some_function(arg):
assert not DB.closed()
...
# code goes here
assert not DB.closed()
return result
斷言本身就是很好的注釋,勝過(guò)你直接寫(xiě)注釋:
# when we reach here, we know that n 2
你可以通過(guò)添加斷言來(lái)確保它:
assert n 2
斷言也是一種防御型編程。你不是讓你的代碼防御現(xiàn)在的錯(cuò)誤,而是防止在代碼修改后引發(fā)的錯(cuò)誤。理想情況下,單元測(cè)試可以完成這樣的工作,可是需要面對(duì)的現(xiàn)實(shí)是,它們通常是沒(méi)有完成的。人們可能在提交代碼前會(huì)忘了運(yùn)行測(cè)試代碼。有一個(gè)內(nèi)部檢查是另一個(gè)阻擋錯(cuò)誤的防線,尤其是那些不明顯的錯(cuò)誤,卻導(dǎo)致了代碼出問(wèn)題并且返回錯(cuò)誤的結(jié)果。
加入你有一些if…elif 的語(yǔ)句塊,你知道在這之前一些需要有一些值:
# target is expected to be one of x, y, or z, and nothing else.
if target == x:
run_x_code()
elif target == y:
run_y_code()
else:
run_z_code()
假設(shè)代碼現(xiàn)在是完全正確的。但它會(huì)一直是正確的嗎?依賴的修改,代碼的修改。如果依賴修改成 target = w 會(huì)發(fā)生什么,會(huì)關(guān)系到run_w_code函數(shù)嗎?如果我們改變了代碼,但沒(méi)有修改這里的代碼,可能會(huì)導(dǎo)致錯(cuò)誤的調(diào)用 run_z_code 函數(shù)并引發(fā)錯(cuò)誤。用防御型的方法來(lái)寫(xiě)代碼會(huì)很好,它能讓代碼運(yùn)行正確,或者立馬執(zhí)行錯(cuò)誤,即使你在未來(lái)對(duì)它進(jìn)行了修改。
在代碼開(kāi)頭的注釋很好的一步,但是人們經(jīng)常懶得讀或者更新注釋。一旦發(fā)生這種情況,注釋會(huì)變得沒(méi)用。但有了斷言,我可以同時(shí)對(duì)代碼塊的假設(shè)書(shū)寫(xiě)文檔,并且在它們違反的時(shí)候觸發(fā)一個(gè)干凈的錯(cuò)誤
assert target in (x, y, z)
if target == x:
run_x_code()
elif target == y:
run_y_code()
else:
assert target == z
run_z_code()
這樣,斷言是一種防御型編程,同時(shí)也是一種文檔。我想到一個(gè)更好的方案:
if target == x:
run_x_code()
elif target == y:
run_y_code()
elif target == z:
run_z_code()
else:
# This can never happen. But just in case it does...
raise RuntimeError("an unexpected error occurred")
按約定進(jìn)行設(shè)計(jì)是斷言的另一個(gè)好的用途。我們想象函數(shù)與調(diào)用者之間有個(gè)約定,比如下面的:
“如果你傳給我一個(gè)非空字符串,我保證傳會(huì)字符串的第一個(gè)字母并將其大寫(xiě)?!?/p>
如果約定被函數(shù)或調(diào)用這破壞,代碼就會(huì)出問(wèn)題。我們說(shuō)函數(shù)有一些前置條件和后置條件,所以函數(shù)就會(huì)這么寫(xiě):
def first_upper(astring):
assert isinstance(astring, str) and len(astring) 0
result = astring[0].upper()
assert isinstance(result, str) and len(result) == 1
assert result == result.upper()
return result
按約定設(shè)計(jì)的目標(biāo)是為了正確的編程,前置條件和后置條件是需要保持的。這是斷言的典型應(yīng)用場(chǎng)景,因?yàn)橐坏┪覀儼l(fā)布了沒(méi)有問(wèn)題的代碼到產(chǎn)品中,程序會(huì)是正確的,并且我們能安全的移除檢查。
下面是我建議的不要用斷言的場(chǎng)景:
不要用它測(cè)試用戶提供的數(shù)據(jù)
不要用斷言來(lái)檢查你覺(jué)得在你的程序的常規(guī)使用時(shí)會(huì)出錯(cuò)的地方。斷言是用來(lái)檢查非常罕見(jiàn)的問(wèn)題。你的用戶不應(yīng)該看到任何斷言錯(cuò)誤,如果他們看到了,這是一個(gè)bug,修復(fù)它。
有的情況下,不用斷言是因?yàn)樗染_的檢查要短,它不應(yīng)該是懶碼農(nóng)的偷懶方式。
不要用它來(lái)檢查對(duì)公共庫(kù)的輸入?yún)?shù),因?yàn)樗荒芸刂普{(diào)用者,所以不能保證調(diào)用者會(huì)不會(huì)打破雙方的約定。
不要為你覺(jué)得可以恢復(fù)的錯(cuò)誤用斷言。換句話說(shuō),不用改在產(chǎn)品代碼里捕捉到斷言錯(cuò)誤。
不要用太多斷言以至于讓代碼很晦澀。
assertIsNotNone(testValue, message)
定義: 單元測(cè)試庫(kù)函數(shù),用于單元測(cè)試中以檢查輸入值是否為None。
輸入值:
testValue:變量,需要測(cè)試的變量。
message:字符串,測(cè)試消息失敗時(shí)顯示的消息。
返回值: 根據(jù)斷言條件返回布爾值,如果輸入值滿足assertIsNotNone()將返回true,否則返回false。
函數(shù)名:
1. 判斷是否相等
assertEqual
assertNotEqual
2. 判斷真假
assertTrue
assertFalse
3. 判斷是否為空
assertIsNone
assertIsNotNone
返回值: 滿足斷言,返回True;不滿足斷言,返回False。
在測(cè)試用例中,執(zhí)行完測(cè)試用例后,最后一步是判斷測(cè)試結(jié)果是 pass 還是 fail,自動(dòng)化測(cè)試腳本里面一般把這種生成測(cè)試結(jié)果的方法稱為斷言assert。
接口請(qǐng)求斷言是指在發(fā)起請(qǐng)求之后,對(duì)返回的響應(yīng)內(nèi)容去做判斷,用來(lái)查看是否響應(yīng)內(nèi)容是否與規(guī)定的返回值相符。
在發(fā)起請(qǐng)求后,我們使用一個(gè)變量 r 存儲(chǔ)響應(yīng)的內(nèi)容,也就是 Response 對(duì)象。
Response 對(duì)象有很多功能強(qiáng)大的方法可以調(diào)用,比如直接獲取響應(yīng)頭,獲取 Unicode 編碼后的響應(yīng)內(nèi)容,獲取二進(jìn)制的響應(yīng)內(nèi)容,獲取原始的響應(yīng)內(nèi)容等等。
接下來(lái)我們就詳解
對(duì)接口服務(wù)發(fā)起 HTTP 請(qǐng)求信息,獲得響應(yīng)內(nèi)容之后,對(duì)其做斷言驗(yàn)證。
一、Python 接口自動(dòng)化斷言
在發(fā)起請(qǐng)求后,使用一個(gè)變量r存儲(chǔ)響應(yīng)的內(nèi)容,也就是Response對(duì)象。
r = requests.get("")
登錄后復(fù)制
響應(yīng)結(jié)果:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.ceshiren.com",
"User-Agent": "python-requests/2.25.1",
"X-Forwarded-Host": "httpbin.ceshiren.com",
"X-Scheme": "https"
},
"origin": "119.123.205.82",
"url": ""
}
登錄后復(fù)制
Response 對(duì)象有很多功能強(qiáng)大的方法可以調(diào)用,比如直接獲取響應(yīng)頭,獲取 Unicode 編碼后的響應(yīng)內(nèi)容,獲取二進(jìn)制的響應(yīng)內(nèi)容,獲取原始的響應(yīng)內(nèi)容等等。
響應(yīng)斷言
響應(yīng)狀態(tài)碼斷言
1、斷言成功
import requests
r = requests.get('')
assert r.status_code==200
登錄后復(fù)制
assert是 python 的內(nèi)置函數(shù),用來(lái)判斷表達(dá)式,當(dāng)表達(dá)式條件為 False 的時(shí)候就會(huì)觸發(fā)異常。r.status_code是 response 對(duì)象內(nèi)的一個(gè)方法,用于獲得返回值的狀態(tài)碼。assert r.status_code==200 就是在判斷狀態(tài)碼是否等于 200,如果不等于 200 則會(huì)拋出異常。
2、斷言失敗
import requests
r = requests.get('')
assert r.status_code==400
Traceback (most recent call last):
File "stdin", line 1, in module
AssertionError
登錄后復(fù)制
從以上例子可了解到,此響應(yīng)狀態(tài)碼實(shí)際輸出與預(yù)期結(jié)果狀態(tài)碼 400 不相等,所以拋出了異常。
Json 響應(yīng)斷言
data = {
"hogwarts": ["a","b","c"]
}
r = requests.post('',json=data)
print(json.dumps(r.json(),indent=2))
assert r.status_code == 200
assert r.json()["json"]["hogwarts"][0] == "a"
登錄后復(fù)制
響應(yīng)結(jié)果:
"args": {},
"data": "{"hogwarts": ["a", "b", "c"]}",
"files": {},
"form": {},
"headers": {
...省略...
},
"json": {
"hogwarts": [
"a",
"b",
"c"
]
},
"origin": "113.89.8.68",
"url": ""
}
登錄后復(fù)制
通過(guò) assert r.json()[“json”][“hogwarts”][0] == “a” 對(duì) json 的內(nèi)容進(jìn)行斷言,其中 r.json() 是獲取相應(yīng)的內(nèi)容,r.json()[“json”] 是獲取到 json 的內(nèi)容,r.json()[“json”][“hogwarts”] 是獲取到 hogwarts 的內(nèi)容,r.json()[“json”][“hogwarts”][0] 是 hogwarts 下的第一個(gè)數(shù)據(jù)。
二、Java 接口自動(dòng)化斷言
Java 通過(guò) then 進(jìn)行斷言驗(yàn)證,then() 方法可以對(duì)多種不同類型的響應(yīng)信息進(jìn)行驗(yàn)證。
斷言響應(yīng)狀態(tài)碼成功
import static io.restassured.RestAssured.*;
public class Requests {
public static void main(String[] args) {
given().when().get("").
//通常通過(guò) then 進(jìn)行斷言驗(yàn)證
then().statusCode(200);
}
}
登錄后復(fù)制
通過(guò) then() 方法提供的 statusCode() 方法即可實(shí)現(xiàn)對(duì)于響應(yīng)狀態(tài)碼的驗(yàn)證,statusCode() 方法通常接收的是 int 類型的參數(shù)。statusCode(200) 表示判斷響應(yīng)狀態(tài)碼是否等于 200,如果不等于 200 則會(huì)拋出異常。
如果將以上代碼中斷言驗(yàn)證的代碼改成 statusCode(300),那么控制臺(tái)則會(huì)輸出異常信息。
Exception in thread "main" java.lang.AssertionError: 1 expectation failed.
Expected status code 300 but was 200.
登錄后復(fù)制
json 響應(yīng)斷言
import static io.restassured.RestAssured.*;
import static org.hamcrest.core.IsEqual.equalTo;
public class Requests {
public static void main(String[] args) {
given().when().get("").
then().body("headers.Host", equalTo("httpbin.ceshiren.com")).log().all();
}
}
登錄后復(fù)制
通過(guò) then().body(“headers.Host”, equalTo(“httpbin.ceshiren.com”)) 對(duì) json 的內(nèi)容進(jìn)行斷言,其中 then().body() 是獲取相應(yīng)的內(nèi)容。
第一個(gè)參數(shù)是從響應(yīng)內(nèi)容中提取實(shí)際的字段值。
第二個(gè)參數(shù)調(diào)用了 equalTo() 方法,并在其中傳入了期望結(jié)果。
三、總結(jié)
不是所有的拼搏都會(huì)成功,我們不能盲目的拼搏,必須帶上我們的智慧,將屬于我們的機(jī)會(huì)牢牢抓住,才會(huì)多一份成功。
青春是短暫的,而這短暫的時(shí)間里我們的任務(wù)很重。讓花兒盡情的開(kāi)吧,只要它不是落了一個(gè)虛度年華的罪名,那么,我都樂(lè)意。
這世界從來(lái)不會(huì)跟你過(guò)不去,你得到的任何好與壞,都是自己做的。根本沒(méi)有正確的選擇,我們只不過(guò)是要努力奮斗,使當(dāng)初的選擇變得正確。
1024程序員節(jié)
自動(dòng)化測(cè)試
軟件測(cè)試工程師
軟件測(cè)試
測(cè)試開(kāi)發(fā)
全國(guó)股民的福音來(lái)了!
診斷漲停板
廣告
python自動(dòng)化斷言封裝
1289閱讀·0評(píng)論·0點(diǎn)贊
2022年4月25日
自動(dòng)化腳本測(cè)試代碼參考
400閱讀·0評(píng)論·1點(diǎn)贊
2022年6月29日
python-web自動(dòng)化測(cè)試-斷言
3069閱讀·0評(píng)論·1點(diǎn)贊
2021年11月18日
pytthon自動(dòng)化代碼大全
1445閱讀·0評(píng)論·2點(diǎn)贊
2022年1月17日
pythonui自動(dòng)化斷言,python UI自動(dòng)化13- 斷言方法
2353閱讀·0評(píng)論·2點(diǎn)贊
2021年4月27日
python 接口斷言的方法_python接口自動(dòng)化—unittest 常用的斷言方法
1798閱讀·0評(píng)論·0點(diǎn)贊
2021年2月9日
滄州全屋定制僅需1.68萬(wàn),輸入面積,算算你家需要多少錢?
00:34
全友全屋定制
查看詳情
全友全屋定制
廣告
python requests接口自動(dòng)化測(cè)試 (數(shù)據(jù)庫(kù)斷言)
2277閱讀·0評(píng)論·6點(diǎn)贊
2022年5月16日
python unittest斷言_python接口自動(dòng)化(二十三)--unittest斷言——上(詳解)
196閱讀·0評(píng)論·0點(diǎn)贊
2020年11月29日
Python自動(dòng)化之結(jié)果斷言篇
2143閱讀·0評(píng)論·3點(diǎn)贊
2021年7月16日
接口自動(dòng)化框架之python pytest斷言assert(一)
763閱讀·0評(píng)論·0點(diǎn)贊
2022年5月18日
python自動(dòng)化測(cè)試常用斷言的使用方法
2522閱讀·0評(píng)論·1點(diǎn)贊
2018年9月12日
Web自動(dòng)化測(cè)試:測(cè)試用例斷言
1180閱讀·0評(píng)論·0點(diǎn)贊
2022年5月12日
python寫(xiě)測(cè)試腳本語(yǔ)言_python測(cè)試學(xué)習(xí)-自動(dòng)化測(cè)試的執(zhí)行步驟
335閱讀·0評(píng)論·0點(diǎn)贊
2020年12月13日
做python自動(dòng)化得時(shí)候怎么添加斷言_python接口自動(dòng)化 - 斷言(上)
2019閱讀·0評(píng)論·0點(diǎn)贊
2020年12月11日
全網(wǎng)最詳細(xì)的Python自動(dòng)化測(cè)試
1755閱讀·0評(píng)論·0點(diǎn)贊
2022年10月15日
Python自動(dòng)化測(cè)試項(xiàng)目的代碼編寫(xiě)規(guī)范
1269閱讀·0評(píng)論·4點(diǎn)贊
2021年5月8日
用Python實(shí)現(xiàn)自動(dòng)化測(cè)試
4326閱讀·2評(píng)論·1點(diǎn)贊
2022年7月8日
Selenium自動(dòng)化測(cè)試(斷言 / fame框架處理)------實(shí)例
781閱讀·0評(píng)論·0點(diǎn)贊
2021年11月29日
7個(gè)實(shí)用的Python自動(dòng)化代碼,別再重復(fù)造輪子了
1966閱讀·0評(píng)論·0點(diǎn)贊
2022年4月23日
去首頁(yè)
看看更多熱門內(nèi)容
評(píng)論16
Passerby_Wang
贊
寫(xiě)得也太詳細(xì)了吧,學(xué)到了好多 也歡迎博主來(lái)我這里指點(diǎn)一二呀
2022.10.25
測(cè)試內(nèi)卷
贊
歡
根據(jù)老外的解釋就是說(shuō)assertEqual與assertEquals沒(méi)有區(qū)別,可以說(shuō)是完全一樣的函數(shù),而現(xiàn)在assertEquals函數(shù)已經(jīng)被棄用,也就說(shuō)不建議你使用了,以后可能這個(gè)方法就在python中消失了,在python3.0中已經(jīng)趨向使用不帶s的assert方法了,但是現(xiàn)在仍然沒(méi)有刪掉的原因是因?yàn)橛幸恍┡f代碼和項(xiàng)目在使用帶s的方法,語(yǔ)言要保持舊代碼的兼容性。
至于assert那就很好解釋了,就是判斷0,1 也就是python中的真假關(guān)系
assertAlmostEquals這2個(gè)方法存在的原因與上面的相同,建議你不要使用帶s的方法了,這個(gè)方法是做一個(gè)粗略判斷,判斷的值為你4舍5入后的值,也就是說(shuō)5.1與5.2是相等的,如果使用這樣的assert方法。
(一)assertEqual 和 assertNotEqual
assertEqual:如兩個(gè)值相等,則pass
assertNotEqual:如兩個(gè)值不相等,則pass
下面看下具體使用方法
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[1]/android.support.v7.app.ActionBar.e[2]").click()#切到超模25tab
sleep(3)
self.assertEqual(self.driver.find_element_by_id('com.boohee.secret:id/tv_title').text,u'超模25','切到超模25tab失敗')
(1)這邊是通過(guò)id(com.boohee.secret:id/tv_title)獲取它的text值,與預(yù)期“超模25”對(duì)比,如相等則pass;不相等則fail。
(2)后面的“切到超模25tab失敗”是fail時(shí)需要打印的信息,可寫(xiě)可不寫(xiě)。
斷言assertNotEqual反著用就可以了。
(二)assertTrue和assertFalse
assertTrue:判斷bool值為True,則pass
assertFalse:判斷bool值為False,則Pass
下面看下具體使用方法
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[1]/android.widget.TextView[1]").click()#點(diǎn)擊登錄入口
sleep(2)
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[1]/android.widget.EditText[1]").send_keys("testq1")#輸入用戶名
sleep(2)
self.assertTrue(self.find_element_by_id('com.boohee.secret:id/btn_login').is_enabled(),'未輸密碼登錄按鈕為不可點(diǎn)狀態(tài),Fail')
(1)這邊是通過(guò)id(com.boohee.secret:id/btn_login)獲取它的激活狀態(tài),如為True則pass;反之則fail。
(2)后面的“未輸密碼登錄按鈕為不可點(diǎn)狀態(tài)”是fail時(shí)需要打印的信息,可寫(xiě)可不寫(xiě)。
斷言assertFalse反著用就可以了。
(三)assertIsNone和assertIsNotNone
assertIsNone:不存在,則pass
assertIsNotNone:存在,則pass
下面看下具體使用方法
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[1]/android.widget.TextView[1]").click()#點(diǎn)擊登錄入口
sleep(2)
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[1]/android.widget.EditText[1]").send_keys("testq1")#輸入用戶名
sleep(2)
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[2]/android.widget.EditText[1]").send_keys("boohee")#輸入密碼
sleep(2)
self.driver.find_element_by_xpath("http://android.widget.LinearLayout[1]/android.widget.Button[1]").click()#點(diǎn)擊登錄按鈕
sleep(10)
self.assertIsNotNone(self.driver.find_element_by_id('com.boohee.secret:id/tv_edit_profile'),'無(wú)編輯資料按鈕,登錄失敗,Fail')
(1)這邊是通過(guò)尋找id(com.boohee.secret:id/tv_edit_profile)的元素是否存在,如存在則pass;不存在則fail。
(2)后面的“無(wú)編輯資料按鈕,登錄失敗,Fail”是fail時(shí)需要打印的信息,可寫(xiě)可不寫(xiě)。
斷言assertIsNone反著用就可以了。
名稱欄目:python斷言函數(shù)詳解 Python斷言
文章分享:http://aaarwkj.com/article26/dooopcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、營(yíng)銷型網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)