NX Lab

Chạy bộ test ngay trong NX với part mẫu và xuất báo cáo đạt/không đạt

#Python#Kiểm thử1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Một số lỗi chỉ lộ khi gọi API thật. Bộ test chạy trong NX mở part mẫu, gọi các hàm của bạn, so sánh với kết quả đã biết và in báo cáo, dùng được cả trước mỗi lần phát hành.

    Chạy bộ test ngay trong NX với part mẫu và… Chạy bộ test ngay trong NX với part mẫu và…

    Các bước thực hiện

    1. Chuẩn bị part mẫu. Khối hộp 100x50x20 đã biết hộp bao, thể tích.
    2. Viết khung test nhỏ. Hàm kiểm tra so sánh giá trị có dung sai.
    3. Mở part mẫu. OpenDisplay, chạy các kiểm tra.
    4. Thu kết quả. Danh sách đạt/không đạt.
    5. Đóng part và báo cáo. In tổng kết.

    Code tham khảo (Python)

    import NXOpen
    
    class BoTest:
        def __init__(self, lw):
            self.lw, self.dat, self.truot = lw, 0, 0
    
        def so_sanh(self, ten, thuc, ky_vong, dung_sai=1e-3):
            ok = abs(thuc - ky_vong) <= dung_sai
            self.dat += ok
            self.truot += (not ok)
            self.lw.WriteLine("[%s] %s: thực %.4f, kỳ vọng %.4f" % ("ĐẠT" if ok else "TRƯỢT", ten, thuc, ky_vong))
    
        def bang(self, ten, dieu_kien):
            self.dat += bool(dieu_kien)
            self.truot += (not dieu_kien)
            self.lw.WriteLine("[%s] %s" % ("ĐẠT" if dieu_kien else "TRƯỢT", ten))
    
    def hop_bao(body):
        xs, ys, zs = [], [], []
        for e in body.GetEdges():
            for p in e.GetVertices():
                xs.append(p.X); ys.append(p.Y); zs.append(p.Z)
        return max(xs) - min(xs), max(ys) - min(ys), max(zs) - min(zs)
    
    def main(part_mau="D:/NXLab/mau/khoi_100x50x20.prt"):
        session = NXOpen.Session.GetSession()
        lw = session.ListingWindow
        lw.Open()
        t = BoTest(lw)
        part, st = session.Parts.OpenDisplay(part_mau)
        st.Dispose()
        try:
            bodies = [b for b in part.Bodies if b.IsSolidBody]
            t.bang("Có đúng 1 body đặc", len(bodies) == 1)
            dai, rong, cao = sorted(hop_bao(bodies[0]), reverse=True)
            t.so_sanh("Hộp bao dài", dai, 100.0)
            t.so_sanh("Hộp bao rộng", rong, 50.0)
            t.so_sanh("Hộp bao cao", cao, 20.0)
            t.bang("Số mặt = 6", len(bodies[0].GetFaces()) == 6)
        finally:
            part.Close(NXOpen.BasePart.CloseWholeTree.FalseValue,
                       NXOpen.BasePart.CloseModified.CloseModified, None)
        lw.WriteLine("Tổng kết: %d đạt, %d trượt" % (t.dat, t.truot))
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • Lớp BoTest rất nhỏ nhưng đủ dùng: so sánh số có dung sai và kiểm tra điều kiện đúng/sai.
    • Part mẫu có kích thước biết trước nên mọi kết quả kỳ vọng cố định, dễ phát hiện hồi quy.
    • sorted(..., reverse=True) làm kết quả không phụ thuộc hướng đặt của khối trong part mẫu.

    Lỗi thường gặp

    • Part mẫu phải được kiểm soát phiên bản; sửa nhầm part mẫu làm mọi test sai.
    • Test chạy trong NX cần giấy phép; lên lịch chạy ban đêm hoặc trước khi phát hành thay vì mỗi lần sửa.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.