精华内容
下载资源
问答
  • 1、一个项目测试工作如何介入?在每个阶段测试人员可以做什么?     项目前期:跟进需求,充分理解功能需求     项目开发阶段:测试人员收集和准备测试素材,文档等,...

    1、一个项目中测试工作如何介入?在每个阶段测试人员可以做什么?

        项目前期:跟进需求,充分理解功能需求
        项目开发阶段:测试人员收集和准备测试素材,文档等,包括:测试用例准备、测试数据准备。自动化准备
        项目测试阶段:测试执行
        验收阶段:准备环境给产品负责人验收
        上线后:进行线上验证

    2、你们公司的测试流程是什么?

        首先要知道的是测试不是开发把软件完成后再去测试,软件测试 应该有它的周期:需求分析、概要设计、详细设计、软件编码、软件测试、软件发布。
        软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试。因此,软件测试贯穿于软件项目的整个生命过程。在软件项目中的每一个阶段都要进行不同目的和内容的测试活动,以保证软件在各个阶段的正确性,软件测试的对象不仅仅是软件代码,还包括软件需求文档和设计文档。软件开发与软件测试应该是交互进行的。例如:单元编码需要单元测试,模块组合阶段需要集成测试,如果等到软件编码完成在进行测试,那么测试的时间将会很短,测试覆盖面将不会很全面,测试的效果大打折扣。更严重的是如果此时发现了软件需求阶段或概要设计阶段的错误,如果要修复该类错误,将会耗费大量的时间和人力。
    以下是标准流程:
        一、 一般情况是项目开始阶段产品经理会写一个产品需求文档和以产品原型图,然后会开一个需求评审会,讨论下需求的合理性,根据团队技术情况,对需 求中的缺点及风险进行评估(小公司可能直接产品经理出需求,然后评审会也不开,低头就是干。)
        二、 需求最终确定后,我们测试组会熟悉产品需求(熟读深刻认识产品),leader 根据项目排期写测试计划,同时 leader 会给我们 3 个人分出来所测试的测 试模块,然后我们写自己对应的模块的测试用例,写完了交给你同事或者 leader 给你评审下,看看有没有漏测的、不合理的情况,然后改下就好了 (咱们是在 excel 里写,有的在缺陷管理工具或其他工具)。
        三、 根据项目整体计划排期,我们写测试用例的时候开发也在开发软件,开发出 来的模块会进行提测。然后大家一起根据同事写的测试用例进行测试就行了。 (这里部分共可能在没有 UI 页面的时候需要测试进行接口测试,这个会稍 后点,因为会根据开发写的接口文档写测试用例进行测试,我们接口只测试 正向数据)
    不断的测试提 bug,回归测试经历很多轮的测后项目会从模块测试(单元测 试)进行到集成测试、系统测试阶段。
        四、 进入集成测试、系统测试阶段,项目模块与模块之前会进行关联组成一个完 整的系统。所有测试用例还是要重新在测试一遍(当然了,重点留意的地方 应该是在之前测试中发生过 bug 的功能)。开发改 bug,测试回归测试进行 N 轮后。bug 全部修改完毕了。
        五、 进行到验收测试阶段,验收测试没问题了项目就可以上线了。

    3、这个项目中你的工作主要是什么?

        前提主要是根据项目进度,对项目做出来的模块进行单元测试,每天按照测试用例去跑项目,发现问题,复现 bug,然后在禅道上提出 bug 给对应的开发,闲下来自己看看其他人的测试进度,上网站学习,看学习视频。
        后期主要是针对我负责的模块,购物车模块、商品分类、权限管理模块等,对这些模块进行不断地测试,提bug。和开发沟通问题,和产品沟通需求不明确的地方。同事针对我负责的部分模块尝试进行自动化测试,写出一些自动化代码来。
        日常就是:第一件事就是看开发有没有新发版本,看看新版本是多少,然后去复测前一天提的 bug 在今天发的版本上解决了哪些,然后在测试当天测试计划中负责测试的那部分,发现问题提 bug 给开发,如果项目急得话可能会追开发下午再发一个新的版本继续进行回归测试。完事了自己学习或研究对其他模块写自动化脚本。

    4、每天能写多少条测试用例?

        这个问题就是坑,因为没有固定的要去写多少多少,不要回答几十条,上百条。这个问题没有确定的答案
        你应该看你当前负责的模块功能的复杂度,直接回答没留意过具体每天具体多少条。一般我 2、3 天写一个模块,一个模块的测试用例大概在 150 条左右。以具体的功能为准

    5、每天能提多少个 bug,测试多少条用例?

        一般项目前期 bug 会多点,一天,三四十,二三十都有(不仅限功能,还有 UI, 提示语类的,如果一天测试三,四十的功能性 bug 你们开发就可以下课回家了),后期 相对较少一天一二十或者十几个。后期组长经常开玩笑时每天不测试出来 10 个 bug 不能下班。
        注意:一般 bug 的出现的概率是在你总共测试用例的 30%左右
        每天测试多少条用例:每天能测试的用例多少,按测试计划安排,没有固定数量, 尽量说每天能测试 XXX 功能,XXX 模块,自己的公司很少让你固定测试多少条用例。

    展开全文
  • 有时候一个项目测试用例很多,而且分成了好几组测试,如果想每隔一段时间汇总一下测试的进度,那么需要统计一下测试完成了多少用例,有多少是PASS,有多少是FAIL,有多少是BLOCKED等等。所以了个可视化的小工具...

    有时候一个项目的测试用例很多,而且分成了好几组测试,如果想每隔一段时间汇总一下测试的进度,那么需要统计一下测试完成了多少用例,有多少是PASS,有多少是FAIL,有多少是BLOCKED等等。所以写了个可视化的小工具,可以帮助统计,一键生成报表。
    当然,这个源代码写得一言难尽,非常冗余,重复的代码太多。原本想通过输入参数来决定主窗口生成多少个文本框,但是没有摸索出来,后续再优化吧。。。
    通过这此的练习,对可视化编程有了初步的了解,后面也会继续加深这方面的学习。

    # -*- coding:utf-8 -*-
    import xlrd
    import sys
    import os
    import openpyxl
    from openpyxl.styles import Font,colors
    from openpyxl.styles import PatternFill
    from PySide2.QtWidgets import *
    
    
    
    class A(QWidget):
    
        def __init__(self):
    
            super().__init__()
            self.initUI()
            
        def initUI(self):
    
            self.button = QPushButton('Enter', self)   # 窗口里添加一个按钮
            self.label = QLabel('Welcome to use this tool!',self)
            #self.textEdit = QPlainTextEdit('',self)
    
            self.setGeometry(200, 200, 300, 150)
            self.button.move(100, 100)
            self.button.resize(90,30)
            self.label.move(50,30)
            #self.textEdit.move(90,50)
            #self.textEdit.resize(110,40)
            self.setWindowTitle('Welcome')
            self.show()
    
        def closeEvent(self, event):
    
            #self.close.emit()
            self.close()
    
    
    class B(QWidget):
    
        def __init__(self):
    
            super().__init__()
            self.initUI()
    
        def initUI(self):
    
            self.label1 = QLabel('Test Suite Name', self) # 窗口里添加一个标签
            self.label1.move(20, 20)
    
            self.lable2 = QLabel('Total',self)
            self.lable2.move(420,20)
    
            self.lable3 = QLabel('Not Run',self)
            self.lable3.move(520,20)
    
            self.lable4 = QLabel('Passed',self)
            self.lable4.move(620,20)
    
            self.lable5 = QLabel('Failed',self)
            self.lable5.move(720,20)
    
            self.lable6 = QLabel('Blocked',self)
            self.lable6.move(820,20)
    
            self.button = QPushButton('Calculate',self)
            self.button.move(900,300)
    
            self.setGeometry(600, 200, 1024, 600)
            self.setWindowTitle('Test Coverage Calculator')
    
    
            self.textEdit11 = QPlainTextEdit('',self)
            self.textEdit11.setPlaceholderText("Please input test suite name")
            self.textEdit11.move(20,40)
            self.textEdit11.resize(330,30)
    
            self.textEdit12 = QPlainTextEdit('',self)
            self.textEdit12.move(420,40)
            self.textEdit12.resize(50,30)
    
            self.textEdit13 = QPlainTextEdit('',self)
            self.textEdit13.move(520,40)
            self.textEdit13.resize(50,30)
    
            self.textEdit14 = QPlainTextEdit('',self)
            self.textEdit14.move(620,40)
            self.textEdit14.resize(50,30)
    
            self.textEdit15 = QPlainTextEdit('',self)
            self.textEdit15.move(720,40)
            self.textEdit15.resize(50,30)
    
            self.textEdit16 = QPlainTextEdit('',self)
            self.textEdit16.move(820,40)
            self.textEdit16.resize(50,30)
    
            self.textEdit21 = QPlainTextEdit('',self)
            self.textEdit21.setPlaceholderText("Please input test suite name")
            self.textEdit21.move(20,90)
            self.textEdit21.resize(330,30)
    
            self.textEdit22 = QPlainTextEdit('',self)
            self.textEdit22.move(420,90)
            self.textEdit22.resize(50,30)
    
            self.textEdit23 = QPlainTextEdit('',self)
            self.textEdit23.move(520,90)
            self.textEdit23.resize(50,30)
    
            self.textEdit24 = QPlainTextEdit('',self)
            self.textEdit24.move(620,90)
            self.textEdit24.resize(50,30)
    
            self.textEdit25 = QPlainTextEdit('',self)
            self.textEdit25.move(720,90)
            self.textEdit25.resize(50,30)
    
            self.textEdit26 = QPlainTextEdit('',self)
            self.textEdit26.move(820,90)
            self.textEdit26.resize(50,30)
    
            self.textEdit31 = QPlainTextEdit('',self)
            self.textEdit31.setPlaceholderText("Please input test suite name")
            self.textEdit31.move(20,140)
            self.textEdit31.resize(330,30)
    
            self.textEdit32 = QPlainTextEdit('',self)
            self.textEdit32.move(420,140)
            self.textEdit32.resize(50,30)
    
            self.textEdit33 = QPlainTextEdit('',self)
            self.textEdit33.move(520,140)
            self.textEdit33.resize(50,30)
    
            self.textEdit34 = QPlainTextEdit('',self)
            self.textEdit34.move(620,140)
            self.textEdit34.resize(50,30)
    
            self.textEdit35 = QPlainTextEdit('',self)
            self.textEdit35.move(720,140)
            self.textEdit35.resize(50,30)
    
            self.textEdit36 = QPlainTextEdit('',self)
            self.textEdit36.move(820,140)
            self.textEdit36.resize(50,30)
    
            self.textEdit41 = QPlainTextEdit('',self)
            self.textEdit41.setPlaceholderText("Please input test suite name")
            self.textEdit41.move(20,190)
            self.textEdit41.resize(330,30)
    
            self.textEdit42 = QPlainTextEdit('',self)
            self.textEdit42.move(420,190)
            self.textEdit42.resize(50,30)
    
            self.textEdit43 = QPlainTextEdit('',self)
            self.textEdit43.move(520,190)
            self.textEdit43.resize(50,30)
    
            self.textEdit44 = QPlainTextEdit('',self)
            self.textEdit44.move(620,190)
            self.textEdit44.resize(50,30)
    
            self.textEdit45 = QPlainTextEdit('',self)
            self.textEdit45.move(720,190)
            self.textEdit45.resize(50,30)
    
            self.textEdit46 = QPlainTextEdit('',self)
            self.textEdit46.move(820,190)
            self.textEdit46.resize(50,30)
    
            self.textEdit51 = QPlainTextEdit('',self)
            self.textEdit51.setPlaceholderText("Please input test suite name")
            self.textEdit51.move(20,240)
            self.textEdit51.resize(330,30)
    
            self.textEdit52 = QPlainTextEdit('',self)
            self.textEdit52.move(420,240)
            self.textEdit52.resize(50,30)
    
            self.textEdit53 = QPlainTextEdit('',self)
            self.textEdit53.move(520,240)
            self.textEdit53.resize(50,30)
    
            self.textEdit54 = QPlainTextEdit('',self)
            self.textEdit54.move(620,240)
            self.textEdit54.resize(50,30)
    
            self.textEdit55 = QPlainTextEdit('',self)
            self.textEdit55.move(720,240)
            self.textEdit55.resize(50,30)
    
            self.textEdit56 = QPlainTextEdit('',self)
            self.textEdit56.move(820,240)
            self.textEdit56.resize(50,30)
    
            self.textEdit61 = QPlainTextEdit('',self)
            self.textEdit61.setPlaceholderText("Please input test suite name")
            self.textEdit61.move(20,290)
            self.textEdit61.resize(330,30)
    
            self.textEdit62 = QPlainTextEdit('',self)
            self.textEdit62.move(420,290)
            self.textEdit62.resize(50,30)
    
            self.textEdit63 = QPlainTextEdit('',self)
            self.textEdit63.move(520,290)
            self.textEdit63.resize(50,30)
    
            self.textEdit64 = QPlainTextEdit('',self)
            self.textEdit64.move(620,290)
            self.textEdit64.resize(50,30)
    
            self.textEdit65 = QPlainTextEdit('',self)
            self.textEdit65.move(720,290)
            self.textEdit65.resize(50,30)
    
            self.textEdit66 = QPlainTextEdit('',self)
            self.textEdit66.move(820,290)
            self.textEdit66.resize(50,30)
    
            self.textEdit71 = QPlainTextEdit('',self)
            self.textEdit71.setPlaceholderText("Please input test suite name")
            self.textEdit71.move(20,340)
            self.textEdit71.resize(330,30)
    
            self.textEdit72 = QPlainTextEdit('',self)
            self.textEdit72.move(420,340)
            self.textEdit72.resize(50,30)
    
            self.textEdit73 = QPlainTextEdit('',self)
            self.textEdit73.move(520,340)
            self.textEdit73.resize(50,30)
    
            self.textEdit74 = QPlainTextEdit('',self)
            self.textEdit74.move(620,340)
            self.textEdit74.resize(50,30)
    
            self.textEdit75 = QPlainTextEdit('',self)
            self.textEdit75.move(720,340)
            self.textEdit75.resize(50,30)
    
            self.textEdit76 = QPlainTextEdit('',self)
            self.textEdit76.move(820,340)
            self.textEdit76.resize(50,30)
    
            self.textEdit81 = QPlainTextEdit('',self)
            self.textEdit81.setPlaceholderText("Please input test suite name")
            self.textEdit81.move(20,390)
            self.textEdit81.resize(330,30)
    
            self.textEdit82 = QPlainTextEdit('',self)
            self.textEdit82.move(420,390)
            self.textEdit82.resize(50,30)
    
            self.textEdit83 = QPlainTextEdit('',self)
            self.textEdit83.move(520,390)
            self.textEdit83.resize(50,30)
    
            self.textEdit84 = QPlainTextEdit('',self)
            self.textEdit84.move(620,390)
            self.textEdit84.resize(50,30)
    
            self.textEdit85 = QPlainTextEdit('',self)
            self.textEdit85.move(720,390)
            self.textEdit85.resize(50,30)
    
            self.textEdit86 = QPlainTextEdit('',self)
            self.textEdit86.move(820,390)
            self.textEdit86.resize(50,30)
    
            self.textEdit91 = QPlainTextEdit('',self)
            self.textEdit91.setPlaceholderText("Please input test suite name")
            self.textEdit91.move(20,440)
            self.textEdit91.resize(330,30)
    
            self.textEdit92 = QPlainTextEdit('',self)
            self.textEdit92.move(420,440)
            self.textEdit92.resize(50,30)
    
            self.textEdit93 = QPlainTextEdit('',self)
            self.textEdit93.move(520,440)
            self.textEdit93.resize(50,30)
    
            self.textEdit94 = QPlainTextEdit('',self)
            self.textEdit94.move(620,440)
            self.textEdit94.resize(50,30)
    
            self.textEdit95 = QPlainTextEdit('',self)
            self.textEdit95.move(720,440)
            self.textEdit95.resize(50,30)
    
            self.textEdit96 = QPlainTextEdit('',self)
            self.textEdit96.move(820,440)
            self.textEdit96.resize(50,30)
    
            self.textEdit101 = QPlainTextEdit('',self)
            self.textEdit101.setPlaceholderText("Please input test suite name")
            self.textEdit101.move(20,490)
            self.textEdit101.resize(330,30)
    
            self.textEdit102 = QPlainTextEdit('',self)
            self.textEdit102.move(420,490)
            self.textEdit102.resize(50,30)
    
            self.textEdit103 = QPlainTextEdit('',self)
            self.textEdit103.move(520,490)
            self.textEdit103.resize(50,30)
    
            self.textEdit104 = QPlainTextEdit('',self)
            self.textEdit104.move(620,490)
            self.textEdit104.resize(50,30)
    
            self.textEdit105 = QPlainTextEdit('',self)
            self.textEdit105.move(720,490)
            self.textEdit105.resize(50,30)
    
            self.textEdit106 = QPlainTextEdit('',self)
            self.textEdit106.move(820,490)
            self.textEdit106.resize(50,30)
    
    
    
        def cal(self):
            # qty = 5
    
            info1 = []
            info2 = []
            info3 = []
            info4 = []
            info5 = []
            info6 = []
    
            info1.append(self.textEdit11.toPlainText())
            info1.append(self.textEdit21.toPlainText())
            info1.append(self.textEdit31.toPlainText())
            info1.append(self.textEdit41.toPlainText())
            info1.append(self.textEdit51.toPlainText())
            info1.append(self.textEdit61.toPlainText())
            info1.append(self.textEdit71.toPlainText())
            info1.append(self.textEdit81.toPlainText())
            info1.append(self.textEdit91.toPlainText())
            info1.append(self.textEdit101.toPlainText())
    
            info2.append(self.textEdit12.toPlainText())
            info2.append(self.textEdit22.toPlainText())
            info2.append(self.textEdit32.toPlainText())
            info2.append(self.textEdit42.toPlainText())
            info2.append(self.textEdit52.toPlainText())
            info2.append(self.textEdit62.toPlainText())
            info2.append(self.textEdit72.toPlainText())
            info2.append(self.textEdit82.toPlainText())
            info2.append(self.textEdit92.toPlainText())
            info2.append(self.textEdit102.toPlainText())
    
            info3.append(self.textEdit13.toPlainText())
            info3.append(self.textEdit23.toPlainText())
            info3.append(self.textEdit33.toPlainText())
            info3.append(self.textEdit43.toPlainText())
            info3.append(self.textEdit53.toPlainText())
            info3.append(self.textEdit63.toPlainText())
            info3.append(self.textEdit73.toPlainText())
            info3.append(self.textEdit83.toPlainText())
            info3.append(self.textEdit93.toPlainText())
            info3.append(self.textEdit103.toPlainText())
    
            info4.append(self.textEdit14.toPlainText())
            info4.append(self.textEdit24.toPlainText())
            info4.append(self.textEdit34.toPlainText())
            info4.append(self.textEdit44.toPlainText())
            info4.append(self.textEdit54.toPlainText())
            info4.append(self.textEdit64.toPlainText())
            info4.append(self.textEdit74.toPlainText())
            info4.append(self.textEdit84.toPlainText())
            info4.append(self.textEdit94.toPlainText())
            info4.append(self.textEdit104.toPlainText())
    
            info5.append(self.textEdit15.toPlainText())
            info5.append(self.textEdit25.toPlainText())
            info5.append(self.textEdit35.toPlainText())
            info5.append(self.textEdit45.toPlainText())
            info5.append(self.textEdit55.toPlainText())
            info5.append(self.textEdit65.toPlainText())
            info5.append(self.textEdit75.toPlainText())
            info5.append(self.textEdit85.toPlainText())
            info5.append(self.textEdit95.toPlainText())
            info5.append(self.textEdit105.toPlainText())
    
            info6.append(self.textEdit16.toPlainText())
            info6.append(self.textEdit26.toPlainText())
            info6.append(self.textEdit36.toPlainText())
            info6.append(self.textEdit46.toPlainText())
            info6.append(self.textEdit56.toPlainText())
            info6.append(self.textEdit66.toPlainText())
            info6.append(self.textEdit76.toPlainText())
            info6.append(self.textEdit86.toPlainText())
            info6.append(self.textEdit96.toPlainText())
            info6.append(self.textEdit106.toPlainText())
    
            #print(info2)
            #print(int(info2[0]))
    
            font1 = Font(name='Tahoma',color='15428B', size=7, bold=True)
            font2 = Font(name='Trebuchet MS',color=colors.BLACK, size=7, bold=False)
            background1 = PatternFill('solid','BDD7EE')
            background2 = PatternFill('solid','EDEDED')
    
            wb = openpyxl.load_workbook(r'Test_Coverage.xlsx')
    
            sheet2 = wb.create_sheet('Test Coverage')
    
            title = ['Test Suite', 'Total', 'Not Run', '[%]', 'Passed', '[%]', 'Failed', '[%]', 'Blocked', '[%]', 'Completed[%]']
    
            for j in range (2,13):
    
                sheet2.cell(2,j).value = title[j-2]
    
                sheet2.cell(2,j).font = font1
    
                sheet2.cell(2,j).fill = background1
    
            for k in range (3,len(info1)+3):
    
                if info1[k-3] != '':
    
    
                    sheet2.cell(k,2).value = info1[k-3]
                    sheet2.cell(k,2).font = font2
                    sheet2.cell(k,2).fill = background2
    
                    sheet2.cell(k,3).value = int(info2[k-3])
                    sheet2.cell(k,3).font = font2
                    sheet2.cell(k,3).fill = background2
    
                    sheet2.cell(k,4).value = int(info3[k-3])
                    sheet2.cell(k,4).font = font2
                    sheet2.cell(k,4).fill = background2
    
                    sheet2.cell(k,5).value = round(100*(sheet2.cell(k,4).value)/(sheet2.cell(k,3).value),2)
                    sheet2.cell(k,5).font = font2
                    sheet2.cell(k,5).fill = background2
    
                    sheet2.cell(k,6).value = int(info4[k-3])
                    sheet2.cell(k,6).font = font2
                    sheet2.cell(k,6).fill = background2
    
                    sheet2.cell(k,7).value = round(100*(sheet2.cell(k,6).value)/(sheet2.cell(k,3).value),2)
                    sheet2.cell(k,7).font = font2
                    sheet2.cell(k,7).fill = background2
    
                    sheet2.cell(k,8).value = int(info5[k-3])
                    sheet2.cell(k,8).font = font2
                    sheet2.cell(k,8).fill = background2
    
                    sheet2.cell(k,9).value = round(100*(sheet2.cell(k,8).value)/(sheet2.cell(k,3).value),2)
                    sheet2.cell(k,9).font = font2
                    sheet2.cell(k,9).fill = background2
    
                    sheet2.cell(k,10).value = int(info6[k-3])
                    sheet2.cell(k,10).font = font2
                    sheet2.cell(k,10).fill = background2
    
                    sheet2.cell(k,11).value = round(100*(sheet2.cell(k,10).value)/(sheet2.cell(k,3).value),2)
                    sheet2.cell(k,11).font = font2
                    sheet2.cell(k,11).fill = background2
    
                    sheet2.cell(k,12).value = round(100-sheet2.cell(k,5).value,2)
                    sheet2.cell(k,12).font = font2
                    sheet2.cell(k,12).fill = background2
    
                else:
                    continue
    
            wb.save(r'Test_Coverage.xlsx')
    
            QMessageBox.about(self,'Result', 'Done!')
    
            os.system(r'Test_Coverage.xlsx')
    
    
            
    
            
    
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        #a = A()
        b = B()
        b.show()
        #a.button.clicked.connect(b.show)
        b.button.clicked.connect(b.cal)
        sys.exit(app.exec_())
    
    
    展开全文
  • 简单7步骤:1、理清模块需求:----由于项目需求说明书不详细,而且没有进行需求评审的情况下,在拿到上级lead给的测试任务后,拿到先别着急去写测试用例,首先你应该做的是,根据有限的模块需求说明进行深入理解...
  • 最近在学习自动化,就拿项目练练手,了一小部分,其余的都一样,只不过是重复的工作,就只...2,中间,是整体的中间的,自动化测试用例多少条看你个人定,多少个函数就多少条,一个函数就是一个测试用例,也就是...

    最近在学习自动化,就拿项目练练手,写了一小部分,其余的都一样,只不过是重复的工作,就只写了两个模块

    一:代码框架的搭建

    框架搭起来,就是头部,中间,尾部,我说的是我代码的结构...

    1,头部,当然是指头文件,email和password是后台的登录密码和邮箱,不能展示,嘿嘿

    2,中间,是整体的中间的,自动化测试用例,多少条看你个人定,多少个函数就多少条,一个函数就是一个测试用例,也就是一个流程,我是这样写的:

    setUp()的意思是每次测试用例执行的时候,它都要执行一次

    tearDown()的意思是退出页面,也是每执行测试用例一次,它也会执行一次

    class testVideo(unittest.TestCase):
          
          def setUp(self):
              pass:
          def 你创建的函数名(self):
              pass:
          ....
          def tearDown(self):
            self.driver.quit()
    

    3,尾部,再次强调是我代码的尾部

    testunit.addTest(测试类名(‘测试用例函数名’)),想加入多少条就多少条;

    filename存放的位置最好是和代码文件存放在一起吧

    if __name__ == "__main__":
        #定义一个单元测试容器
        testunit=unittest.TestSuite()
        #将测试用例加入进去
        testunit.addTest(testVideo('switch_window'))
        testunit.addTest(testVideo('test_user'))
        testunit.addTest(testVideo('user_manage'))
        #我存放的位置和代码文件存放的位置是一样的
        filename='D://video//testCase1//r.html'
        fp=open(filename,'wb')
        #自定义测试报告
        runner=HTMLTestRunner.HTMLTestRunner(
            stream=fp,
            title='serendipity测试报告',
            description='用例执行情况'
        )
    #运行测试
        runner.run(testunit)
        fp.close()

    二:上代码:

    import unittest
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium import webdriver
    from time import sleep
    import HTMLTestRunner
    url='https://admin.serendipvideo.com/#/login'
    email='wcx@serendipity.com'
    password='wcx'
    class testVideo(unittest.TestCase):
        #启动浏览器
        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.get(url)
            self.driver.find_element_by_xpath('//input[@autocomplete]').send_keys(email)
            input2 = self.driver.find_element_by_xpath('//input[@type="password"]').send_keys(password)
            button = WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//button'))
            )
            button.click()
        #句柄切换函数
        def switch_window(self):
            window_1 = self.driver.current_window_handle
            windows = self.driver.window_handles
            for current_window in windows:
                if current_window !=window_1:
                    self.driver.switch_to_window(current_window)   
            print(self.driver.current_url)  
        #用户管理
        def test_user(self):
            sleep(5)
            print(self.driver.current_url)
            #点击用户管理
            user_manage = WebDriverWait(self.driver,4,0.5).until(
                EC.presence_of_element_located((By.XPATH, '//div[@class="ivu-menu-submenu-title"]'))
            )
            user_manage.click()
            #点击app用户
            app_user = WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//li[@class="ivu-menu-item"]'))
            )
            app_user.click()
            #用户名搜索
            user_search = WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//input[@autocomplete="off"]'))
            )
            #文件中是用户名
            filename='username.txt'
            with open(filename) as file_object:
                for line in file_object:
                    print(line)
                    user_search.send_keys(line)
                    #搜索按钮
                    search_button=WebDriverWait(self.driver,4,0.5).until(
                        EC.presence_of_element_located((By.XPATH,'//div[@class="ivu-input-group-append ivu-input-search"]'))
                    )
                    user_search.clear()
                    sleep(5)
                    search_button.click()
            #导出用户
            export_user=WebDriverWait(self.driver,6,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//button[@class="ivu-btn ivu-btn-primary"]'))
            )
            export_user.click()
        #管理员
        def user_manage(self):
            sleep(5)
            #点击用户管理
            manager_manage = WebDriverWait(self.driver,4,0.5).until(
                EC.presence_of_element_located((By.XPATH, '//div[@class="ivu-menu-submenu-title"]'))
            )
            manager_manage.click()
            #点击管理员
            user_manager = WebDriverWait(self.driver,4,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//*[@id="app"]/div/div[1]/div[1]/div/ul/li[1]/ul/li[2]'))
            )
            user_manager.click()
            #点击用户个人信息编辑
            wcx_manage = WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//*[@id="app"]/div/div[2]/div[2]/div/div[2]/div/div[2]/div/div[1]/div/div[2]/table/tbody/tr[5]/td[4]/div/div/button[1]/span'))
            )
            wcx_manage.click()
            self.driver.maximize_window()
            sleep(6)
            #编辑管理员的名字
            user_name = WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'/html/body/div[11]/div[2]/div/div/div[2]/form/div[1]/div/div/input'))
            )
            user_name.clear()
            user_name.send_keys('wcx')
            sleep(5)
            #添加新用户
            add_user = WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'//button[@class="ivu-btn ivu-btn-primary"]'))
            )
            add_user.click()
            #输入用户名
            add_user_name=WebDriverWait(self.driver,5,0.5).until(
                EC.presence_of_element_located((By.XPATH,'/html/body/div[11]/div[2]/div/div/div[2]/form/div[1]/div/div/input'))
            )
            add_user_name.send_keys('wcx')
    
        #退出           
        def tearDown(self):
            self.driver.quit()
        
    
    if __name__ == "__main__":
        #定义一个单元测试容器
        testunit=unittest.TestSuite()
        #将测试用例加入进去
        testunit.addTest(testVideo('switch_window'))
        testunit.addTest(testVideo('test_user'))
        testunit.addTest(testVideo('user_manage'))
        #定义报告存放的路径,支持相对路径
        filename='D://video//testCase1//r.html'
        fp=open(filename,'wb')
        #自定义测试报告
        runner=HTMLTestRunner.HTMLTestRunner(
            stream=fp,
            title='serendipity测试报告',
            description='用例执行情况'
        )
    #运行测试
        runner.run(testunit)
        fp.close()
    
    
    
    
    
    
    

    其实挺简单的,加油

    三:上html报告:

    展开全文
  • 一、概念性的问题什么是单元测试、集成测试、系统测试、...让你最有成就感的一个项目是什么?为什么最有成就感?项目中测试流程是怎样的?测试计划吗?测试计划的内容包括哪些?测试这个项目一共用了多少时间,...
    3a9c60e3f9cabd42b2e836757131967d.gif一、概念性的问题
    1. 什么是单元测试、集成测试、系统测试、验收测试?
    2. 什么是阿尔法测试?什么是贝塔测试?
    3. 比较一下黑盒测试和白盒测试的本质?
    4. 什么是冒烟测试,什么是随机测试?
    5. 什么是性能测试?压力测试?负载测试?
    二、测试流程和项目相关
    1. 做过项目吗?做过几个项目?让你最有成就感的一个项目是什么?为什么最有成就感?项目中测试流程是怎样的?
    2. 写过测试计划吗?测试计划的内容包括哪些?
    3. 测试这个项目一共用了多少时间,测试执行用了多少时间?
    4. 写过测试用例吗?测试用例包括哪些内容?写过大概多少条测试用例?
    5. 提交过缺陷吗?使用的是什么工具?在此工具中bug的处理流程是怎样的?提交过大概多少bug?
    6. 写过测试总结报告吗?包括哪些内容?
    三、场景发挥题
    1. 请举2个例子,一个是严重程度比较高但优先级比较低的例子,一个是严重程度比较低但优先级比较高的例子。
    2. 你提交一个bug,开发说不修改,你该怎么办?
    3. 你提交一个bug,开发说不是缺陷,你该怎么办?
    4. 随机缺陷如何处理?
    5. 开发人员总是犯一些低级错误该怎么解决?
    6. 所有的软件缺陷都会被修复吗?
    四、测试策略和测试用例题
    1. 给你一支笔,写出他的测试策略
    2. 给你一个杯子,写出他的测试策略
    3. 给你一个桌子,写出他的测试策略
    4. 写出判断三角形形状的测试用例
    5. 写出登录界面的测试用例
    6. 如何开始着手测试一个网页
    五、其他
    1. 了解手机方面的测试吗?
    2. 了解性能测试工具吗?
    3. 了解什么自动化测试工具吗?
    4. TCP/IP协议包括哪几层?
    5. TCP和IP分别属于哪一层?
    6. SMTP、POP3、FTP、Telnet、Http的端口号分别是多少?
    7. 请列出10个你常用的linux命令
    8. Vi工具有几种工作模式?
    9. 数据库的多表联查要熟悉(考官可能现场出题)
    10. 给数据库取个别名的命令是什么?
    11. SQL语句的增删改查语法分别是什么?
    12. SQL语言中,用于事务回滚的语句是什么
    13. SQL中,删除一个表的命令是什么?
    六、HR常问的问题
    1. 请自我介绍一下
    2. 你的职业生涯规划是怎样的?
    3. 你对加班怎么看?
    4. 你有男/女朋友吗?家里有几个孩子?
    5. 你还有什么要问的吗?
    6. 你为什么要做测试工作呢?
    7. 你觉得你最大的优点和缺点分别是什么?
    8. 对于我们公司你了解多少?
    9. 你找工作的时候最看重公司的什么?联系作者可加微信号:semmy0508关联QQ群:测试小咖汇(598452239)
    10. d60376c29c0d8cbe85b79af9ba1c017b.png
    展开全文
  • mocha诞生于2011年,是一个特征丰富的javascript测试框架,...公司项目中,没有自动化的单元测试,而是通过if/else判断,多少有点懵逼 所在在种种考虑之下,我们就选择mocha测试框架做单元测试 测试报告 在terminal...
  • 1.测试不仅仅是我多少用例,测了多少需求多少功能点,搞了多少自动化脚本,更要对整个项目进行把控,把握项目存在的风险,督促项目进度。 一个亲身经历:一位同事在测试的时候,最后收尾阶段发现了三个新的问题...
  • 1. 你们的项目组使用源代码管理工具了么? 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。 2. 你们的项目组使用缺陷管理系统了么?...ClearQuest太复杂,我的推荐是...应该用一个
  • 第三个项目介绍一个模块 业务流程 怎么来测这个模块 多少用例 发布一条信息业务流是怎么实现的 用jmeter测过哪个模块的性能测试 jmeter性能测试脚本是怎么的 接口地址是谁的地址 接口是在手机上吗? jmeter发...
  • 1. 你们的项目组使用源代码管理工具了么? 应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。 2. 你们的项目组使用缺陷管理系统了么?...应该用一个专门的系统,可以是T
  • 性能测试心得之

    千次阅读 2017-04-20 09:58:36
    以前做过一些“山寨版”的性能测试,我都说了,是山寨么,当然不正规,不过,现在有多少企业的测试...这一个星期主要做需求理解和性能需求分析,然后性能测试计划和测试用例。发现了很多问题,总结如下: 需求分
  • 那么就可以按照Mocha的写法来写一个测试用例,因此新建一个测试代码在<code>test/index.js</code></p> <pre><code> js 'use strict'; require('should'); const mylib = require('../...
  • 面试宝典 项目

    2021-01-08 18:42:46
    迭代两到三周的项目,需求分析要多久,用例写多久,写多少用例,执行多久,发现多少bug,做了几版本, 项目有没有上线?你负责的模块一共写了多少用例?关于项目是否上线,也可以这样回答(以下是我们同学面试...
  • 深信服测试面试

    2020-06-13 15:49:39
    深信服—测试 一面 1、自我介绍 2、问项目,做过实习。基本都在问这个 3、linux命令 用过什么命令? 4、那查看内存命令,查看端口命令,是否占用? 5、Linux如何启动?...6、Linux如何安装软件...7、那来一个测试用例吧,
  • 测试培训教材

    2014-04-01 12:10:48
    把测试计划树中的“Cruises”包含的所有测试用例以及“Airline Preference”、“Number of Passengers”添加到测试集中: 9、测试过程监控 计划测试的运行 在“Mercury Tours 1.0.1”中新建一个测试集: ...
  • 写一个测试用例。 6.从输入一个网址到页面响应完成中间的详细过程。 7.http与https的区别 8.http报文的组成 9.应用层的协议有哪些? 10.算法题:牛牛刚刚学习了素数的定义,现在给定一个正整数N,牛牛希望知道N最少...
  • 软件性能测试

    2009-03-20 23:13:00
    以前做过一些“山寨版”的性能测试,我都说了,是山寨么,当然不正规,不过,现在有多少企业的...这一个星期主要做需求理解和性能需求分析,然后性能测试计划和测试用例。发现了很多问题,总结如下:需求分析问题:
  • 1000道软件测试工程师最全面试题链接:...讲项目流程,多少用例,找了多少bug4.根据手机闹钟功能写测试点,越多越好5.讲rf框架怎么做的,怎么封装的6.能接受加班吗?(没补助...
  • 测试覆盖率

    2011-10-28 11:16:51
     客户交给开发商一个项目,通过测试等质量掌控流程,可以将产品的质量保证在一个相对较高的水准,减少后续工作的成本。但是现在很多开发商和客户很短视,觉得只要现在没有出问题,就可以了,不愿意在软件开发过程中...
  • 软件测试经典面试题 (超实用)

    热门讨论 2012-02-16 13:48:08
    4、正交表测试用例设计方法的特点是什么? 5 5、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程? 5 6、你觉得bugzilla在使用的过程中,有什么问题? 5 7、描述测试用例设计的完整过程? 6 8、单元...
  • amazon qae 面试

    2018-10-26 10:22:00
    2. 一个网页框能够计算多少个a,说一下测试用例的设置 3. 两部电梯的测试用例, 电梯算法, 各种各样的电梯 4. 写一个程序计算100以内的素数。 二面 1. 工作超负荷的情况 2. 设置判断三角形的测试用例 3. 软件...
  • 注解我们多多少少接触过,例如在junit单元测试用例这个@Test就是一个注解,在软件工程工程中一般@开头都是注解,JDK1.5开始引入注解这个功能。 1.环境准备 新建一个动态web项目,然后把导包,把前面bean对象和...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

一个项目写多少测试用例