內部UI自動化測試培訓之python基礎

image

這個文檔的由來是公司內部UI自動化測試培訓的資料。部門爲了減少測試工作量,準備做UI自動化測試。我寫python,其他同事都是java,所以python基礎和UI自動化測試selenium的培訓就由我來完成。
完整教程包括4篇內容,本篇是python的基礎內容,高手請跳過。雖然是基礎,但是可以看做是一個python的微型教程,如果想了解python,簡單上手嘗試,這個教程適合。

UI 自動化測試相關內容:

前言

Python 是一門上手非常快的語言,學習python這門編程語言達到能夠正常使用的程度,需要掌握的點包括:

  1. 語言基礎特性
  2. 數據類型
  3. 流程控制
  4. 函數調用
  5. 面向對象
  6. 模塊與包

下面從這6個方面來快速熟悉python語言

語言基礎特性

解釋性語言

程序執行原理:
計算機不能直接理解高級語言,只能理解和運行機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能運行高級語言所編寫的程序。

編譯型:
程序在執行之前需要一個專門的編譯過程,把程序編譯成爲機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結果就行了。
編譯型語言:
C/C++、Golang。典型的就是C語言可以編譯後生成可執行文件,之後無需再次編譯,直接運行可執行文件即可。

解釋型:
程序不需要編譯,程序在運行時才翻譯成機器語言,每執行一次都要翻譯一次。因此效率比較低。
解釋型語言:
C#、PHP、JavaScript、Perl、Python、Ruby 等等

Python 是一個解釋性語言,Python解釋器首先會將python程序編譯成中間文件 .pyc 文件,然後解釋器執行pyc文件。

優缺點

  1. WEB開發——最火的Python web框架Django, 支持異步高併發的Tornado框架,短小精悍的flask,bottle。
  2. 網絡編程——支持高併發的Twisted網絡框架, py3引入的asyncio使異步編程變的非常簡單
  3. 爬蟲——爬蟲領域,Python幾乎是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥
  4. 雲計算——目前最火最知名的雲計算框架就是OpenStack,Python現在的火,很大一部分就是因爲雲計算
  5. 人工智能—— Python 是目前公認的人工智能的必備語言,pytorch和tensorflow等框架都是用python編寫
  6. 自動化運維 devops ——問問中國的每個運維人員,運維人員必須會的語言是什麼?10個人相信會給你一個相同的答案,它的名字叫Python
  7. 金融分析——金融行業寫的好多分析程序、高頻交易軟件就是用的Python。到目前Python是金融分析、量化交易領域裏用的最多的語言
  8. 科學運算—— 97年開始,NASA就在大量使用Python在進行各種複雜的科學運算,隨着NumPy, SciPy, Matplotlib, Enthought librarys等衆多程序庫的開發,使的Python越來越適合於做科學計算、繪製高質量的2D和3D圖像。和科學計算領域最流行的商業軟件Matlab相比,Python是一門通用的程序設計語言,比Matlab所採用的腳本語言的應用範圍更廣泛

性能問題

python最大的問題就是性能問題,可以參考如下性能測試。

但是python並不是不能支持大型項目。比如facebook的很多大型後臺服務都是python項目。

Twitter 勁敵 Threads,“魔改”了哪些 Python 技術棧?

新手小提示:如果在此之前沒有接觸過python編程,想要嘗試復現本教程中的示例,可以通過如下幾步:

  1. 找到一個linux服務器
  2. 在命令行中輸出python3,進入python解釋器中
  3. 逐條輸入代碼

數據類型

Python 有數據類型,但是變量定義時不需要指定變量的類型。格式:

變量 = 數值

對比java,C++等需要指明變量的類型

int d = 3

數值

整型:可以存儲無限大的數字,理論上沒有上限

>>> score = 100
>>> print(score)
100

浮點型:沒有精度限制

>>> pi = 3.1415926
>>> print(pi)
3.1415926

布爾:用True和False表示布爾類型。True可以當成數值1來用,False可以當成0來用

>>> is_vip = True
>>> 
>>> print(is_vip)
True


>>> has_error = False
>>> has_error == 0
True

複數:一個實數和一個虛數組合構成,表示爲:x+yj

>>> a = 100+50j
>>> print(a)
(100+50j)

字符串

string = "hello world"

訪問:使用下標直接訪問字符串中的特定字符。可以正索引,也可以負索引

string = "hello world"

>>> string = "hello world"
>>> string[1]
'e'
>>> string[-1]
'd'
>>>

切片:所謂切片就是獲取序列的一個連續子序列。字符串切片語法是:[start:end],取到的範圍是下標start開始到end-1,也就是所謂的左閉右開

>>> string[1:4]
'ell'
>>> string[1:]
'ello world'
>>> string[1:100]
'ello world'
>>>

列表

列表是一種容器類型,類似於數組,按照順序排序元素。但是存入的元素沒有數據類型的約束,可以是任意類型。
特點:無限長度、可以存入任意類型的數據結構

創建:使用中括號創建列表

>>> arr = [1, 2, 3, 4, 5]
>>> arr
[1, 2, 3, 4, 5]

訪問:可以索引訪問,支持切片,支持負索引,支持按步長訪問

# 索引
>>> arr
[1, 2, 3, 4, 5]
>>> arr[1]
2
# 切片
>>> arr[1: -1]
[2, 3, 4]
>>>
>>> arr[:3]
[1, 2, 3]
>>>
# 按步長訪問,訪問下標0-8的元素,步長爲2
>>> arr = [1,2,3,4,5,6,7,8,9]
>>> arr[0:9:2]
[1, 3, 5, 7, 9]

添加:append 在尾部追加 ;insert 在任意下標插入數據

>>> arr
[1, 2, 3, 4, 5]
>>> arr.append(10)
>>> arr
[1, 2, 3, 4, 5, 10]
>>>
>>> arr.insert(0, -1)
>>> arr
[-1, 1, 2, 3, 4, 5, 10]

刪除:pop()刪除隊列末尾; pop(index)刪除指定下標; remove(value) 刪除指定值

>>> arr
[-1, 1, 2, 3, 4, 5, 10]
>>> arr.pop()
10
>>> arr.pop(0)
-1
>>> arr.remove(5)
>>> arr
[1, 2, 3, 4]

元組

元組和列表類似,但是元組是不可修改,刪除元素。
特點:不可刪除和修改元素,是不可變序列

創建:創建一個元組有兩種方法,分別是小括號和tuple關鍵字

>>> num = (10, 20, 30, 40, 50)
>>> num
(10, 20, 30, 40, 50)
>>> type(num)
<class 'tuple'>
>>>

>>> list1 = ["python", "java", "C++"]
>>> tup1 = tuple(list1)
>>> tup1
('python', 'java', 'C++')
>>>

訪問:可以通過下標和切片的方式訪問元組

>>> num
(10, 20, 30, 40, 50)
>>> num[1]
20
>>> num[1:10]
(20, 30, 40, 50)
>>>

字典

字典也是一種容器類型,java中叫hashmap,是由鍵值對組成的數據結構。
特點:訪問時間複雜度爲常數
創建:通過大括號和dict關鍵字都可以創建字典

>>> p_dict = {"name": "xiaozhang", "age": 18, "finish_course": False}
>>>
>>> p_dict
{'name': 'xiaozhang', 'age': 18, 'finish_course': False}

訪問:字典通過key來訪問value,一共有兩種訪問方式[]和get方法。

>>> p_dict["name"]
'xiaozhang'

# 取不到值會報錯
>>> p_dict["height"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'height'

# 取不到值不會報錯
>>> p_dict.get("age")
18
>>> p_dict.get("height")
>>> p_dict.get("height", 0)
0

添加:兩種添加方法,增加keyvalue鍵值對和更新另一個字典

>>> p_dict["height"] = 180
>>>
>>> p_dict.update({"phone": 12306})
>>>
>>>
>>> p_dict
{'name': 'xiaozhang', 'age': 18, 'finish_course': False, 'height': 180, 'phone': 12306}

刪除:兩種刪除方法,pop刪除指定key,popitem()隨機刪除一個

>>> p_dict.pop("age")
18
>>> p_dict.popitem()
('phone', 12306)
>>>

集合

python中的集合,和數學中的集合概念一樣,用來保存不重複的元素,即集合中的元素都是唯一的,互不相同。
特點:元素不重複,只能存儲不可變的數據類型,包括整形、浮點型、字符串、元組,無法存儲列表、字典、集合這些可變的數據類型。
創建:
從形式上看,和字典類似,Python 集合會將所有元素放在一對大括號 {} 中,相鄰元素之間用“,”分隔,如下所示:

>>> set1 = {1,2,3,4,5}
>>> set1
{1, 2, 3, 4, 5}
>>> type(set1)
<class 'set'>

訪問:集合不支持單個元素訪問,可以遍歷全部
添加:使用add添加元素

>>> set1.add(100)
>>> set1
{1, 2, 3, 4, 5, 100}

刪除:使用remove刪除指定值,如果不存在該值會拋出異常

>>> set1.remove(4)
>>> set1
{1, 2, 3, 5, 100}

集合操作:集合支持數學意義上的集合的操作,包括:兩個集合取交集、差集、並集、補集

# 差集

>>> set1 = {1, 2, 3}
>>> set2 = {1, 4, 5}
>>> set1 - set2
{2, 3}

# 並集
>>> set1 | set2
{1, 2, 3, 4, 5}

# 補集
>>> set1 ^ set2
{2, 3, 4, 5}

# 交集
>>> set1 & set2 
{1}

流程控制

條件判斷

python使用if關鍵字做條件判斷,語法特點:

  1. 使用縮進對齊來確定代碼塊
  2. 使用冒號標誌結束
>>> age = 20
>>> if age >= 18:
...     print("成年人")
... else:
...     print("未成年人")
...
成年人

循環語句

python只有兩種循環語法,分別是for循環和while循環,沒有do while這種語法

for循環

python中的for循環使用in這個關鍵字,從待循環的容器中取出每一個元素,賦值給循環標識i

>>> ikun = ["雞", "你", "太美"]
>>> for i in ikun:
...     print(i)
...
雞
你
太美

java for循環和python for循環對比

public class Test {
   public static void main(String[] args) {
 
      for(int x = 0; x < 20; x = x+1) {
         System.out.print(x);
      }
   }
}
>>> print(list(range(20)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

for i in range(20):
    print(i)

java for循環是讓變量x不斷自增,直到大於20退出循環,python for循環是range(20)生成一個從0到19的容器,每次取出一個元素賦值給i。

while

while 遇到條件不滿足則退出,和其他語言類似

>>> index = 10
>>> while index > 0:
...     print(index)
...     index = index - 1
...
10
9
8
7
6
5
4
3
2
1


函數調用

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重複利用率。

函數定義

def get_vip(score):
    if not isinstance(score, int):
       print("輸入不是數字")
       return
    if score >= 60:
        return True
    else:
        return False

is_vip = get_vip(88)
print(is_vip)
>>>
True

定義函數通過def關鍵字開始,冒號結束。函數代碼塊以統一縮進標識。

函數返回

python中函數返回有一個特性:函數可以返回多個值,如:

def get_vip(score):
    is_vip = False
    is_super_vip = False
    if score > 60:
        is_vip = True
    if score > 90:
        is_super_vip = True
    return is_vip, is_super_vip
    
vip, super_vip = get_vip(88) 
>>> vip
True
>>> super_vip
False

如上示例返回兩個值,函數調用時也需要用兩個值接收,否則會拋出異常。

面向對象

類和實例

使用關鍵字class定義,class後面緊接着是類名。類名通常是大駝峯命名

class Person(object):
    pass

object 是Student繼承的類,如果沒有繼承任何類可以省略括號以及裏面的內容。

實例

類是抽象的模板,比如Person類,而實例是根據類創建出來的一個具體的對象。python不需要任何關鍵字就能實例化一個對象,使用函數調用的方法就能創建一個實例。

one_person = Person()

屬性

python面向對象中,變量叫做屬性

class Person:
    def __init__(self, name, job):
        self.name = name
        self.job = job
        
name = "馬保國"
job = "渾元形意太極門掌門人"
p = Person(name, job)
print(f"朋友們好啊, 我是{p.job}{p.name}")

方法

python面向對象中,函數叫做方法

class Person:
    def __init__(self, name, job):
        self.name = name
        self.job = job
        
    def say(self):
        print("這兩個年輕人不講武德!來,騙,來偷襲我69歲的老同志。我勸這位年輕人,耗子尾汁")

name = "馬保國"
job = "渾元形意太極門掌門人"
p = Person(name, job)
p.say()

構造方法

在python的類中有一個特殊的方法用於實例創建時初始化,就是構造方法。
類就如同一個模板,通過類創建的實例肯定是千差萬別的。實例在創建時可以傳入屬於自己的屬性,在python中就是通過這個構造方法__init__來實現。

class Person:
    def __init__(self, name, job):
        self.name = name
        self.job = job

在創建實例時傳入name 和 job 兩個參數

name = "馬保國"
job = "渾元形意太極門掌門人"
p = Person(name, job)

後續整個實例都可以使用該初始化的參數

class Person:
    def __init__(self, name, job):
        self.name = name
        self.job = job
    
    def introduce(self):
        print(f"朋友們好啊, 我是{self.job}{self.name}")

對比java中也有構造方法

public class worker{
    public String name;
    public int age;

    public Worker(String name, int age){
        this.name = name;
        this.age = age;
    }
    
    public String toString() {
        return "大家好!我是新來的員工,我叫"+name+",今年"+age+"歲。";
    }
}

模塊與包

模塊

python中代碼是通過模塊和包管理的。
一個 py 文件就是一個模塊。

包是保存幾個模塊的文件夾,包中通常包含幾個py文件和一個__init__.py的特殊文件。__init__.py 用於標識該文件夾是一個包。

Python 網絡請求最常用的庫requests目錄賞析,每一個包的目錄下面都有一個__init__.py文件。

安裝第三方包

安裝第三方包,炫酷進度條。

pip install alive-progress
from alive_progress.styles import showtime # 使用from import關鍵字導入模塊
showtime()

python基礎知識介紹到這裏就結束了,UI自動化測試Selenium請參考另一篇 selenium 開源UI測試工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章