ctf up怎么写 write_软件测试工程师要不要写工具?
Fintech概念正受到不少互聯網金融公司的熱捧,主要是指代那些可用于撕裂傳統金融服務方式的高新技術。越來越多的企業開辟了新的部門去研究各種各樣能讓自己產品增值的科技類產品。尤其是在很多互聯網金融公司,業務分析師BA(Business Analyst),又稱產品經理受到大家的追捧,雖然身處西二旗等ITer聚集地,但是他們做的工作與金融街上的白領們并無不同,他們是無所不懂的金融達人,頂著各個海外名校金融數學系的Master光環,手持CFA,CPA,FRM,AFP/CFP,CIIA,ACCA等等。
既然是在IT公司做需求分析的工作,除了需要出具需求說明書,然后將需求翻譯成程序員能夠理解的說明文檔,不可避免的也需要做一些測試的工作。現在各種工具琳瑯滿目,各種智能的自動化測試平臺也在全面普及,越來越多的人工工作被取代,于是測試工程師經常會接到任務說:寫個工具給BA用,讓他們可以參與測試。說起來容易做起來難,對于大部分金融達人來說,代碼對于他們無異于普通人看哥德巴赫猜想的手稿,如何讓他們能夠參與進來,能夠更多地參與測試成為了測試工程師更多關注的問題。
前段時間正好接到了一個需求,由于業務需要計算期權費,BA需要計算出最優的數據組合,但是輸入有3個參數,每個參數有40個數據,且數據是保留到小數點后15位,這樣算下來的排列組合多到一個BA不可能在2周內找到最優解,更不要提在需求文檔里明確寫上排列組合的期望結果。如果BA寫不出來,對于不懂金融的開發和測試,就更是一頭霧水,無從下手,怎么能讓BA自己算出來需要的數據呢?試了下Excel+Python的解決方案,基本滿足了BA的需求,唯一需要BA支持的就是輸入的excel需要按照規定的格式制作,以便程序讀取。比如第一列是執行價,第二列是買入期權,第三列是賣出期權:
我們對應在代碼里需要讀取寫入Excel里面的數據,依然使用最熟悉的xlrd和xlwt包。之所以把路徑之類的都參數化,主要是為了生成UI之后,BA使用起來更方便。
# 獲取文件 input_file_path = input.get() print("Input File Path: " + input_file_path) output_file_path = input_file_path.replace("option price caculator.xlsx", "new file.xls") print("Output File Path: " + output_file_path)在Java中我們一般會使用BigDecimal來進行金融數據的處理,但是在Python中,雖然也有BigDecimal包,但是處理起來會出現各種各樣不明原因的報錯,所以我們選擇了float類型。
# 打開文件 workbook = xlrd.open_workbook(input_file_path)# 獲取sheet內容 sheet1 = workbook.sheet_by_index(0)# 獲取整列的值 orgstrike = sheet1.col_values(0) orgcall = sheet1.col_values(1) orgput = sheet1.col_values(2)# 更改格式 strike = [float(x) for x in orgstrike] call = [float(x) for x in orgcall] put = [float(x) for x in orgput]計算完成后,然后生成新的excel來保存處理過的數據,在不同的Sheet中保存不同的計算結果以便查看。如果需要多次運行且結果可以被覆蓋,則加上cell_overwirte_ok = True就可以了。
# 創建文件 file = xlwt.Workbook() sheet1 = file.add_sheet("符合條件", cell_overwrite_ok=True) sheet1.write(0, 0, 'call') sheet1.write(0, 1, 'strike') sheet1.write(0, 2, 'put') sheet1.write(0, 3, 'strike') sheet1.write(0, 4, 'callNeg') sheet1.write(0, 5, 'strike') sheet2 = file.add_sheet("不符合條件", cell_overwrite_ok=True) sheet2.write(0, 0, 'call') sheet2.write(0, 1, 'strike') sheet2.write(0, 2, 'put') sheet2.write(0, 3, 'strike') sheet2.write(0, 4, 'callNeg') sheet2.write(0, 5, 'strike')接下來就是完成BA需求里面邏輯計算,排列組合的部分了,由于需求不同,我就不展示這部分代碼了,有個提示在這個地方,如果需要在console里面打印出浮點,請使用如下代碼:
print("call: %04d(%18.14f); put: %04d(%18.14f); callneg: %04d(%18.14f)"% (i + 1, strike[i], j + 1, strike[j], k + 1, strike[k]))這樣我們邏輯部分就完成了,下面就要進行UI部分的設計和制作了,由于技(懶)術(惰)原因,我們還是使用Python來做,一氣呵成。
import tkinter.font as tkFont對于一般的BA的需求來說,一個輸入文件,一個輸出文件足夠了,所以我們也本著極簡的原則做一個UI,成品如下,貼入輸入文件的路徑,點擊GO后,會顯示輸出文件的鏈接,點擊鏈接可以打開生成的文件:
在Pycharm的Console里,我們可以看到打印出來的結果:
在文件夾里,我們會找到新生成的文件new file.xls:
在這個文件里,有我們需要的所有符合條件和不符合條件的排列組合:
想做出這樣的效果,網上有很多tkFont的教程可以參考。有幾點需要提示,tkFont在Python2和3中的使用方法不一樣,請先確認自己使用的版本。部分代碼如下:
# Title root.title("Option Price Calculator")# Input File labelFilePath = Label(root, text=" Input File: ") labelFilePath.grid(row=0, sticky=E)# Textbox input = StringVar() entryFilePath = Entry(root, width=80, textvariable=input) entryFilePath.grid(row=0, column=1)# Go buttonGo = Button(root, text="GO", width=5) buttonGo.bind("<Button-1>", lambda event: OptionPriceCalc.read_excel(event, input)) buttonGo.bind("<Button-1>", lambda event: show_output_file_path(event, input)) buttonGo.grid(row=0, column=3, padx=5, sticky=E+W)# Output File labelOutput = Label(root, text="Output File: ") labelOutput.grid(row=1, sticky=E)完成需求后,BA提出了新的看法,對于點擊連接后是否直接打開,我們是可以控制的:
def show_output_file_path(event, input):output = input.get().replace("option price caculator.xlsx", "new file.xls")ft = tkFont.Font(family="Calibri", size=11, underline=1)labelOutputFile = Label(root, text=output, fg="blue", font=ft)labelOutputFile.grid(row=1, column=1, sticky=W+N+S)# Click Go -> Click File NamelabelOutputFile.bind("<ButtonPress-1>", lambda event: open_file(output))# Click Go -> Open File Automatically# labelOutputFile.bind("<ButtonPress-1>", os.startfile(output))有了這個模板,BA提出新需求后,我們只需要更改UI文件中調用的方法名,就可以了!
需要測試資料?2020年軟件測試基礎視頻+軟件測試資料,點擊下面卡片領取:
2020 軟件測試講義+視頻+面試題集錦資料?kbyx0011.mikecrm.com總結
以上是生活随笔為你收集整理的ctf up怎么写 write_软件测试工程师要不要写工具?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python自动登录校园网_免费自动登录
- 下一篇: git rebase用法_Git:Clo